免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3311 | 回复: 5
打印 上一主题 下一主题

[C++] 诚心求教linux多个动态库的链接问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-11-15 21:26 |只看该作者 |倒序浏览
file  a.cpp
  1. #include <iostream>
  2. using namespace std;

  3. void b_fun();
  4. void c_fun();

  5. int main()
  6. {
  7.         cout << "This is a.cpp" << endl;
  8.        
  9.         b_fun();
  10.         c_fun();
  11.        
  12.         return 0;
  13. }
复制代码
file  b.cpp
  1. #include <iostream>

  2. using namespace std;

  3. void b_fun()
  4. {
  5.         cout << "This is b.cpp" << endl;
  6. }
复制代码
file  c.cpp
  1. #include <iostream>

  2. using namespace std;

  3. void c_fun()
  4. {
  5.         cout << "This is c.cpp" << endl;
  6. }
复制代码
想测试使用两个动态库的链接来生成一个可执行文件的问题,测试如下:
g++ -shared -fPIC b.cpp -o libb.so
g++ -shared -fPIC c.cpp -o libc.so
这两个命令可以成功,但 g++ a.cpp -lb -lc -o abc 却提示如下错误:
/tmp/cc8XCcdt.o: In function `main':
a.cpp.text+0x33): undefined reference to `c_fun()'
collect2: ld returned 1 exit status
另外使用命令 g++ a.cpp b.cpp c.cpp -o abc 是可以成功执行的,
百思不得其解,恳请各位大牛指点,万分感激!

论坛徽章:
1
白羊座
日期:2013-09-18 22:02:26
2 [报告]
发表于 2013-11-16 12:32 |只看该作者
试试-L参数,另外还有-W,-rpath=参数,都是需要的。

论坛徽章:
0
3 [报告]
发表于 2013-11-18 12:14 |只看该作者
请用-L指定你的链接路径,另外你的-lc可是会和标准C库冲突的 换个名称

论坛徽章:
7
摩羯座
日期:2013-12-05 10:42:57辰龙
日期:2013-12-27 13:40:49亥猪
日期:2014-01-15 09:10:37天秤座
日期:2014-01-20 11:22:20辰龙
日期:2014-01-26 17:02:25午马
日期:2014-01-27 14:22:34水瓶座
日期:2014-02-19 09:36:40
4 [报告]
发表于 2013-11-18 13:19 |只看该作者
@dpxiong193楼的说的很对,libc 默认去链接的libc.so 在/usr/lib/或/usr/lib64中。你就要再用c.so了。

论坛徽章:
0
5 [报告]
发表于 2013-11-18 23:56 |只看该作者
回复 3# luciker1988

    真心佩服,说的很对,非常感谢呀!:wink:

论坛徽章:
0
6 [报告]
发表于 2013-11-18 23:57 |只看该作者
太强悍了,佩服,真的是这个原因,非常感谢!:wink: 回复 4# kdkgod


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP