社区
工具平台和程序库
帖子详情
.lib文件怎么造的?想知道具体方法
SnowFoxMM
2004-05-04 01:04:45
比如我有三个文件
a.h //里面是函数声名
b.c// a.h里面的函数的定义与实现
test.c // 这个文件用到b.c里面的函数
我想把函数定义的文件做成类似我们平时用的标准函数那样,只
需加头文件就可以调用,但用户看不到源程序。是不是要把b.c做成lib?或是什么?
怎么造请给出具体方法
...全文
82
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 阵营的进一步分裂。 � 现有应用完善度不太够,需要的开发工作量较大。--------------------...
devc++使用
呵呵,只得自己自
造
这个了。 本着实事求是的精神,言无不尽,我搜了一下最近的相关帖子,整理了一下,其中我也有很多不清楚的地方,所以,望各位看了以后补充上去,谢谢 1. devc++是用GCC编译器和MINGW内核写的,...
Python PySide6 艺术二维码生成器项目
# Python PySide6 艺术二维码生成器项目## 课程介绍PySide6 是 Qt 官方提供的 Python 库,是一个功能齐全、功能强大的 GUI 库。本课程将使用 PySide6 + Qt Designer + amzqr,带大家一步一步实现一个艺术二维码生成器项目。课程主要内容有:1. 使用 PySide6 开发程序主窗口;2. 使用 Qt Designer 进行窗口界面设计;4. 实现修改二维码背景图片;5. 使用 amzqr 实现生成二维码;6. 实现保存二维码。## 项目截图
我是否提交由 npm 5 创建的 package-lock.json
文件
?
npm 5 was released today,其中一项新功能包括通过创建 package-lock.json
文件
进行确定性安装。这个
文件
应该保存在源代码管理中吗?我假设它类似于 yarn.lock 和 composer.lock,两者都应该保存在源代码管理中。
java生成.bat
文件
_.bat
文件
和Jar包的生成及运行
.bat
文件
和Jar包的生成及运行1、Jar包简单介绍Jar包是Java中所特有的一种压缩文档,有点类似于zip包,区别在于Jar包中有一个META-INF\MANIFEST.MF
文件
(在生成Jar包的过程中会自动创建,
具体
的后面会进行讲解)。...
工具平台和程序库
24,855
社区成员
27,343
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章