免费注册 查看新帖 |

Chinaunix

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

[C] 编译时奇怪的引用问题,undefined reference [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-04-16 10:19 |只看该作者 |倒序浏览
最近想使用activemq做消息处理,在ubuntu12.04上做客户端 http://activemq.apache.org/openwire-c-client.html 。使用activemq项目自带的客户端openwire(c语言),下载源码后,分别编译了apache apr, openwire, activemq, 分别产生了 libapr-1.so, libopenwire.so, libactivemq.so,其中apr放在它自己的安装目录下,后两个在 /usr/lib下。

然后编译openwire提供的main.c,编译没问题,连接就出来了undefined reference to "xx"

main.c 在 http://svn.apache.org/repos/asf/ ... src/examples/main.c

编译命令是

gcc -W -Wall -lactivemq -lopenwire -lapr-1 -L/usr/local/apr/lib main.o -o testmq

出错信息(部分):
main.o: In function 'die':
main.c.text+0xf3):undefined reference to 'apr_initialize'
...
main.c.text+0x2c5):undefined reference to 'amqcs_send'
...

如果是amqcs.h或者ow.h里面的函数,都是undefined reference

另外,这些代码都是C,没有c++,ow.h 可以看
http://svn.apache.org/repos/asf/ ... rc/libopenwire/ow.h

amqcs.h 在 http://svn.apache.org/repos/asf/ ... libactivemq/amqcs.h

谢谢回复!

论坛徽章:
0
2 [报告]
发表于 2013-04-16 10:58 |只看该作者
-I 头文件路径

论坛徽章:
0
3 [报告]
发表于 2013-04-16 11:49 |只看该作者
main.o 已经产生,在编译.o文件时才需要 .I

生成动态库后,是否要生成静态库? 我现在生成静态库后也一样有问题。在连接时,提示
libactivemq.a(amqcs.o):amqcs.c.text+0x59c):more undefined reference to 'apr_pool_destroy' follow
.................. undefined reference to

论坛徽章:
0
4 [报告]
发表于 2013-04-16 12:48 |只看该作者
gcc -W -Wall  -L/usr/local/apr/lib main.o -o testmq -lactivemq -lopenwire -lapr-1

把-l 放到最后面,如果还不行,用

gcc -W -Wall  -L/usr/local/apr/lib main.o -o testmq -Wl,--start-group -lactivemq -lopenwire -lapr-1 -Wl,--end-group

论坛徽章:
0
5 [报告]
发表于 2013-04-16 13:34 |只看该作者
楼上正解啊。

论坛徽章:
0
6 [报告]
发表于 2013-04-17 16:28 |只看该作者
回复 4# notyet


    谢谢,按--start-group解决了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP