编译时链接我的动态库出现错误:undefined reference to ‘XXXXXX’

灼眼的超哥 2012-04-12 01:34:10
如题,之前没问题,编译了自己的动态库,又编译自己的测试程序,能链接到这个动态库。
可是,今天,我又重新编译了自己的动态库, 到了编译测试程序的时候,gcc居然报错,错误信息大致这样:
undefined reference to ‘XXXXXX’
也就是说动态库里没有这个程序使用的函数。
但是,我用mn命令列出动态库的符号清单,清单中,我看到了这些被报错不存在的函数名。
这是什么情况?
...全文
5419 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cyan_L 2014-12-15
  • 打赏
  • 举报
回复
给楼主大大献上我的膝盖!!找了一个晚上终于在你这里找到答案了!!!!
惬意 2012-04-13
  • 打赏
  • 举报
回复
你确定你的动态库已经在内存中运行了吗?

如果已经正确运行了,应该是没有问题的.
疯疯癫癫 2012-04-13
  • 打赏
  • 举报
回复
也许是。。。。。。
[Quote=引用 6 楼 的回复:]
原来编译命令不能这样:
gcc -lXXXX -o test test.o

要改成:
gcc -o test test.o -lXXXX
这样就没错了。

之前一直使用前面那种命令,都没问题,难道是由于gcc版本的原因,导致了现在这个问题?
[/Quote]
灼眼的超哥 2012-04-13
  • 打赏
  • 举报
回复
原来编译命令不能这样:
gcc -lXXXX -o test test.o

要改成:
gcc -o test test.o -lXXXX
这样就没错了。

之前一直使用前面那种命令,都没问题,难道是由于gcc版本的原因,导致了现在这个问题?
灼眼的超哥 2012-04-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

undefined reference to ‘XXXXXX’
没定义就是没定义,mn有符号,并不代表能找到.
要看库怎么给应用提供接口,测试程序通过什么来调用.
[/Quote]
我就是在源码文件里定义函数,编译成动态库;
而测试程序,在源码文件里写上正确的函数名,并加上参数,包含的头文件中有这个函数原型的声明。


root_jli 2012-04-12
  • 打赏
  • 举报
回复
undefined reference to ‘XXXXXX’
没定义就是没定义,mn有符号,并不代表能找到.
要看库怎么给应用提供接口,测试程序通过什么来调用.
Arnold9009 2012-04-12
  • 打赏
  • 举报
回复
库的名字改一个试试看,怀疑有重名的库
灼眼的超哥 2012-04-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

库的位置放对了没?
[/Quote]
编译动态库后,我复制到/usr/local/lib下
编译测试程序,链接动态库,出错。
把编译出来的动态库和程序源码放在同一目录,链接动态库的路径改用当前目录,还是出错。
昵称很不好取 2012-04-12
  • 打赏
  • 举报
回复
库的位置放对了没?

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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