cron 发表于 2013-04-16 10:19

编译时奇怪的引用问题,undefined reference

最近想使用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/activemq/sandbox/openwire-c/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/activemq/sandbox/openwire-c/src/libopenwire/ow.h

amqcs.h 在 http://svn.apache.org/repos/asf/activemq/sandbox/openwire-c/src/libactivemq/amqcs.h

谢谢回复!

txgc_wm 发表于 2013-04-16 10:58

-I 头文件路径

cron 发表于 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

notyet 发表于 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

tansijie 发表于 2013-04-16 13:34

楼上正解啊。

cron 发表于 2013-04-17 16:28

回复 4# notyet


    谢谢,按--start-group解决了
页: [1]
查看完整版本: 编译时奇怪的引用问题,undefined reference