社区
工具平台和程序库
帖子详情
.lib文件怎么造的?想知道具体方法
SnowFoxMM
2004-05-04 01:04:45
比如我有三个文件
a.h //里面是函数声名
b.c// a.h里面的函数的定义与实现
test.c // 这个文件用到b.c里面的函数
我想把函数定义的文件做成类似我们平时用的标准函数那样,只
需加头文件就可以调用,但用户看不到源程序。是不是要把b.c做成lib?或是什么?
怎么造请给出具体方法
...全文
100
22
打赏
收藏
.lib文件怎么造的?想知道具体方法
比如我有三个文件 a.h //里面是函数声名 b.c// a.h里面的函数的定义与实现 test.c // 这个文件用到b.c里面的函数 我想把函数定义的文件做成类似我们平时用的标准函数那样,只 需加头文件就可以调用,但用户看不到源程序。是不是要把b.c做成lib?或是什么? 怎么造请给出具体方法
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
julyclyde
2004-05-07
打赏
举报
回复
那也许吧
反正gcc编的和borland是不通用的
junnyfeng
2004-05-06
打赏
举报
回复
我指的"但有些是兼容的,具体可能要试试才知道" 是指非VC,TC的其他编译器
julyclyde
2004-05-06
打赏
举报
回复
2 肯定说c和tc的lib没有一个兼容的
junnyfeng
2004-05-06
打赏
举报
回复
1。 先把两个c文件编译成obj,然后链接这两个obj应该可以解决
gcc -c b.c -o b.o
gcc -c test.c -o test.o
gcc test.o b.o -o test
2 . 肯定说VC与TC的lib是不兼容的,但有些是兼容的,具体可能要试试才知道
3. gcc 的话可以指定库搜索路径:gcc -Ldir_lib (L后面是lib的路径)
SnowFoxMM
2004-05-06
打赏
举报
回复
上面还有几点问题,up
gernal_dn
2004-05-05
打赏
举报
回复
lib是obj的打包,用lib指令即可。
freefalcon
2004-05-05
打赏
举报
回复
不存在厉害不厉害,这些知识点你知道了也就会了
extern "C"是当C++里面要用到c函数时需要的
主要是因为C++和C对函数名的修饰不一样
你可以试一下,用VC新建一个console程序,默认的main函数所在的文件扩展名将是.cpp
然后添加一个头文件,在头文件里声明一个函数,然后再添加一个.c文件,在.c文件里面实现这个函数
最后在[main].cpp中包含头文件,并调用那个函数,你会发现链接是通不过的
以函数int add(int a, int b);为例,采用C++方式编译后,内部所用函数名为?add@@YAHHH@Z而采用C方式为_add,二者的名字是不一样的,而默认使用的是C++方式
关键字exterc "C"便是指明函数是C函数
具体可以看看msdn上的extern "C"
SnowFoxMM
2004-05-05
打赏
举报
回复
既然问到这里了,干脆多问几个,请大家继续帮忙,结贴时我会加分的
gcc(命令行的)怎么编译多个文件?如上面所说的。
逐个编译是不行的。于是产生了三个问题:
1。如果test.c中只#include b.c,而b.c中只#include a.h,这样虽然可以
编译,但看起来好像不太规范吧。这样就要一起编译两个c文件了,
这两个文件都#include a.h。用命令行怎么操作?
2. 一种编译器编译出来的lib是否只适合与该编译器用,而其他编译器不能调用?
如果不是,互调用时要注意什么?
3。 gcc命令行调用指定的lib时,是否只能在所编译的文件中添加 #pragma comment(lib, "XXX") //XXX为你的lib库名。 就这一种方法吗?你还有其他方法?
SnowFoxMM
2004-05-05
打赏
举报
回复
心宇真厉害,方法全对的
不过你说的
----------------
#ifdef __cplusplus
extern "C" {
#endif
//..这里是a.h中原来的函数声明部分
#ifdef __cplusplus
}
#endif
---------------
这段不明白,能否解析一下?
plbhm
2004-05-05
打赏
举报
回复
b.c中 #include "a.h" 以及所需的头文件,在“Header File"目录里以添加了所需头文件
然后编译成lib,并放进VC的lib目录里。
然后新打开test.c(里面就#include "a.h",另外需要把lib文件加入工程(test)),然后使用extern "C" WINAPI functionname(para1,para2,..)
就可以正常使用了,试试就知道了.
chenqing1128
2004-05-05
打赏
举报
回复
kaphoon(齐柏林飞艇) :我的态度怎么啦?
freefalcon
2004-05-05
打赏
举报
回复
等等
先别按上面的做,当然做了也不错
关键是你还没有导入lib库呢
方法有三:
其一:
在test.c中使用
#pragma comment(lib, "XXX") //XXX为你的lib库名
其二:
在project>setting>link>general>object/library modules中添加你的库名,用空格与前面隔开
其三:
用project>add to project...>files将你的库加入工程
另外,建议不要将你的库放到vc的lib中,你可以新建一个目录嘛,比如mylib等,如果是后者你要注意路径设置
freefalcon
2004-05-05
打赏
举报
回复
先尝试如下方法,不行再论
修改a.h
添加
#ifdef __cplusplus
extern "C" {
#endif
//..这里是a.h中原来的函数声明部分
#ifdef __cplusplus
}
#endif
原因:c和c++对函数名的修饰不一样,vc默认中默认是C++修饰方式
SnowFoxMM
2004-05-05
打赏
举报
回复
就是问lib指令怎么用?
SnowFoxMM
2004-05-04
打赏
举报
回复
楼上的啥意思?具体操作怎么样?
vsfan
2004-05-04
打赏
举报
回复
编译后对目标文件用lib命令
SnowFoxMM
2004-05-04
打赏
举报
回复
我试了一下
选Static Library那项,创建工程……
b.c中 #include "a.h" 以及所需的头文件,在“Header File"目录里以添加了所需头文件
然后编译成lib,并放进VC的lib目录里。
然后新打开test.c(里面就#include "a.h",没添加b.c),在链接时出现不能识别b.c中
所定义的函数名字。 何解?
kaphoon
2004-05-04
打赏
举报
回复
chenqing1128(cq)
这种态度不好~~~哈哈
chenqing1128
2004-05-04
打赏
举报
回复
补充:当然要把a.h 和a.c 要和test.c要放在一个目录下
chenqing1128
2004-05-04
打赏
举报
回复
只要这样就可以了,把b.c改名为a.c,在a.c里加上#include "a.h"就可以了
使用的时候只要在test.c里用#include "a.h"就可以了
没有必要用lib
但要注意函数声明,和函数定义的文件名字要一致如a.h 和a.c
你的a.h和b.c是不可以的。
加载更多回复(2)
新版Android开发教程.rar
� Google 提供了一套 Java 核心包 (J2SE 5,J2SE 6) 的有限子集,尚不承诺遵守 Java 任何 Java 规范 , 可能会
造
成J ava 阵营的进一步分裂。 � 现有应用完善度不太够,需要的开发工作量较大。--------------------...
TSSOP封装库
LIB
文件
格式通常用于存储电子设计自动化(EDA)软件中的元器件模型,包括封装模型和电气模型。设计者在使用该库时,可以直接调用对应的封装,快速方便地进行电路设计。 在实际应用中,使用TSSOP封装的元器件通常...
64位JPEG图像处理库:x64_jpeg.
lib
JPEG(Joint Photographic Experts Group)是一种广泛使用的有损压缩图像
文件
格式,特别适合存储自然场景的彩色照片。它利用人类视觉系统对颜色和亮度细节的不敏感性,通过压缩算法降低图像数据量。64位操作系统架构...
【免费下载】 倍福常用库
文件
指南:提升TwinCAT开发效率的利器
在工业自动化领域,倍福...该项目汇集了一系列预编译的`.
lib
`库
文件
,这些库
文件
是基于TwinCAT环境进行自动化编程的关键资源。无论是I/O处理、通讯协议支持,还是运动控制指令,这些库
文件
都能帮助开发者快速接...
【从入门到精通 项目1】项目经理带你-零基础学习C/C++
得预先介绍他们,
知道
他们各自的名号和用法 解决方案: 包含相应的头
文件
! (头
文件
中, 含有相关元素的介绍说明) std::cout 头
文件
: iostream system 头
文件
: Windows.h #include <Windows.h> 表示把
文件
...
工具平台和程序库
24,856
社区成员
27,329
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章