社区
工具平台和程序库
帖子详情
.lib文件怎么造的?想知道具体方法
SnowFoxMM
2004-05-04 01:04:45
比如我有三个文件
a.h //里面是函数声名
b.c// a.h里面的函数的定义与实现
test.c // 这个文件用到b.c里面的函数
我想把函数定义的文件做成类似我们平时用的标准函数那样,只
需加头文件就可以调用,但用户看不到源程序。是不是要把b.c做成lib?或是什么?
怎么造请给出具体方法
...全文
118
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)
Keil 下生成
LIB
库
文件
以及如何使用
LIB
库
文件
本文详细介绍了如何在Keil环境下生成并使用
LIB
库
文件
。通过具体实例,展示了创建
LIB
库
文件
所需的步骤,包括准备源代码
文件
、设置项目以创建库以及最终编译过程。此外,还说明了如何在新项目中引入并利用这些库
文件
。
静态
lib
文件
,动态
lib
文件
和dll
文件
的区别
本文详细解释了VS项目中动态库dll生成时同时生成
lib
文件
的原因,介绍了静态库与动态库的区别,以及动态
lib
文件
的作用。还讨论了静态
lib
和动态dll的使用注意事项,包括调用方法和应用场景,如软件更新和库封装的便利性。
lib
文件
本文介绍了
lib
文件
,它是静态数据连接库,在Windows中起链接作用。阐述了静态编译和动态编译的特点,说明了与dll
文件
的区别,如
lib
编译时需要,dll运行时需要。还介绍了
lib
文件
的加载方法、生成工具和步骤,以及使用方式。
关于
lib
文件
的介绍
本文详细介绍了静态库(.
lib
)和动态库(.dll)的区别,包括它们的生成原因、内部结构和使用方式。静态库包含完整实现,会增加程序体积,而动态库在运行时加载,便于更新和维护。调用静态库需要.h和.
lib
文件
,动态库则还需.dll
文件
。文章强调了动态库在软件更新和模块化中的优势,并提供了调用方法。
lib
、dll
文件
的中函数的查看与
lib
、dll、pdb
文件
的介绍
本文介绍了如何利用Visual Studio的dumpbin.exe工具查看
lib
和dll
文件
中的函数,以及
lib
、dll和pdb
文件
在程序开发和运行中的作用。
lib
文件
用于编译时链接,dll
文件
用于运行时动态加载。pdb
文件
则存储调试信息。LNK2001错误通常由函数缺失、未添加
lib
库或版本不匹配引起。理解这些
文件
和错误对于软件开发和调试至关重要。
工具平台和程序库
24,851
社区成员
27,330
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章