首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请教怎样在一个lib中链接一个已有的lib

2013-12-21 
请问怎样在一个lib中链接一个已有的lib现有一个第三方库,A.lib,里面有函数func1。然后我想实现一个B.lib,里

请问怎样在一个lib中链接一个已有的lib
现有一个第三方库,A.lib,里面有函数func1。
然后我想实现一个B.lib,里边有函数func2,而func2中会调用func1。
所以,我想把A.lib链接到B.lib中,这样编译是能够通过的。
但是,当我的调用程序链接B.lib的时候,会出现编译错误,说找不到A.lib,一定要把A.lib也放到调用程序的目录下才可以编译通过。。
我试过用dll来链接一个lib是没有问题的,但我不想用dll,因为程序发布的时候也要带着几个dll。。
各位大神有什么好的方法吗,请指教一下,谢谢!
[解决办法]
这个好办,首先什么是lib文件呢?
lib文件说白了就是obj文件打包在一起而已.
你要做的只是将这些obj文件合在一起就行了,可以进入命令行模式:
把要合并的lib库拷贝到lib.exe同级目录下,打开命令行,输入
lib.exe /out:objectlib.lib lib1.lib lib2.lib<回车>
该目录下会生成合并后的lib库object.lib。
[解决办法]
libadd.lib 源代码:
int add(int a,int b)
{
return a+b;
}

mul2add.lib 源代码:
int add(int a,int b);
int mul2add(int a,int b)
{
return 2*add(a,b);
}

合并: lib /OUT:mylib.lib libadd.lib mul2add.lib

测试调用:
#pragma   comment(lib,"mylib.lib")
int mul2add(int a,int b);
int _tmain(int argc, _TCHAR* argv[])
{
int c=mul2add(1,2);
return 0;
}

一切OK!!!



[解决办法]
上面是在windows,vc编译器的实现,如果是在liunx gcc下,原理是一样的,只不过命令不一样:
假设A.a, B.a C.a 在/usr/local/lib目录下
mkdir /tmp/libABC
cd /tmp/libABC
ar x /usr/local/lib/A.a
ar x /usr/local/lib/B.a
ar x /usr/local/lib/C.a
ar cru libABC.a *.o
ranlib libABC.a

[解决办法]
楼上的办法是对的。
可以不用Dos窗口,可以在项目属性的Build Event下Post-Build event command line中输入上述命令。

热点排行