能否将一个静态库中的某个函数连接进另外一个静态库中?

luo73 2005-08-02 04:20:49
(1)静态库A.lib中有某个函数,如
int aa(){return 1234;}

(2)静态库B.lib中调用了这个函数,如
int aa(); //声明
double bb()
{
return 3.0*aa();
}

(3)另外某应用程序调用B.lib 中的bb()函数。

我的问题是:能否把A.lib中的函数aa()的实现链接进B.lib中,这样发行B.lib就不用带个A.lib了
(这样应用程序即只需连接B.lib就可以了)
CB中能这样吗?
by the way, vc中能这样吗?
...全文
273 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
luo73 2005-08-04
  • 打赏
  • 举报
回复
Ji:我记得以前turbo C中也有个类似的命令的。

3ku,问题基本解决。
luo73 2005-08-03
  • 打赏
  • 举报
回复
哦,我没有说清楚。
我说的“发行”不是指exe调用,而是指:提供给其他程序员开发。
luo73 2005-08-03
  • 打赏
  • 举报
回复
季大侠,好像不对呀。
我原来也是按照你说的做法,将a.lib加入到b.lib的工程中,但是不行。

你也可以按照下列步骤测试下:
(1)新建库A.lib工程,包含一个cpp文件(aa.cpp):
int aa(){return 1234;}
编译后产生了A.lib.

(2)新建库B.lib工程,包含一个cpp文件(bb.cpp),并把A.lib包含进来:
int aa(); //声明
double bb()
{
return 3.0*aa();
}
编译后产生了B.lib.

(3)为了验证确实不需要A.lib,暂时删掉A.lib

(4)测试B.lib,新建exe工程,仅仅包含进B.lib和一个cpp文件:
#include <stdio.h>
double bb(); //声明
void main()
{
printf("get a value: %lf\n",bb());
}

!连接通不过,错误提示:
[Linker Error] Unresolved external 'aa()' referenced from D:\LIBTT\B.LIB|bb
jishiping 2005-08-03
  • 打赏
  • 举报
回复
刚才实际测试了一下,发现用BCB的IDE产生的lib,的确如楼主所说。自从用BCB写程序以来,只做过动态库(也就是DLL),没有做过静态库,没有想到BCB的IDE编译连接生成的静态库竟然是这样。不过我教你一个办法,生成b.lib后,在“命令提示符”窗口执行 tlib b.lib + a.lib,这样 a.lib 就被连接到 b.lib 中了。
luo73 2005-08-03
  • 打赏
  • 举报
回复
季:你好。

对不起,我这次又没有表达清楚。
我是是将 a.lib 加入到 b.project 中的,然后编译b.lib的。
但是编译exe时,还是无法脱离a.lib.
事实上,我还是无法做到:把a.lib中的函数aa()的实现编译进b.lib中。

你可以动手试试上面我的步骤,要不给我个成功的demo学习下:

Luo73@etang.com
jishiping 2005-08-03
  • 打赏
  • 举报
回复
> [Linker Error] Unresolved external 'aa()' referenced from D:\LIBTT\B.LIB|bb
这是编译连接b.lib出的错误,而不是编译连接EXE出错。

> 新建库B.lib工程,包含一个cpp文件(bb.cpp),并把A.lib包含进来
什么叫 “把A.lib包含进来”?应该是将 a.lib 加入到 b.project 中。
jishiping 2005-08-02
  • 打赏
  • 举报
回复
另外,静态库是编译程序时,连接器直接将静态库中的函数、变量添加到新的工程中,你不能直接发行静态库。任何一个EXE,不会在运行时能够调用你的静态库。
jishiping 2005-08-02
  • 打赏
  • 举报
回复
可以啦。BCB、VC都是这样的,不过BCB和VC的lib的格式不一样,VC不能用BCB编译的静态库,BCB不能用VC编译的静态库。当你制作B.lib时,直接将a.lib加入到b.lib的工程中就可以了。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧