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

cronzb 2013-04-16 09:57:44
最近想使用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

谢谢回复!
...全文
2402 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jydjdongjie 2013-10-11
  • 打赏
  • 举报
回复
同求啊
ziweige 2013-09-09
  • 打赏
  • 举报
回复
楼主,你能把你的activemq c客户端的编译步骤发个我么?求教啊
ziweige 2013-09-09
  • 打赏
  • 举报
回复
我在activemq的论坛上看到,目前用activemq openwire-c的人很少,大部分已经转向activemq-cpp了,不知道这个怎么编译啊? 网上给的“http://blog.sina.com.cn/s/blog_7f311ef50101cnii.html” 这个我按照这个编译出错,报告ConnectionStateTracker.cpp:61:error not have any field named 'LinkedHashMap'。 万分感谢~
cronzb 2013-09-09
  • 打赏
  • 举报
回复
引用 7 楼 ziweige 的回复:
楼主,你好。 我最近也在弄这个activemq。有一个问题没有弄清楚。 两台主机(无论是windows还是linux的)我都可以用java实现通信。但是我不太清楚用c怎么实现的。例如我在windows主机上使用java客户端,安装activemq,而在另一台主机上我不安装activemq(两台主机通信一般也只需要一个activemq就够了),也不安装jdk(因为这台主机不打算使用java编写客户端),是否只需要安装支持mq的运行库就够了,自己来写c客户端呢?不知道这种想法是否正确?还请大神帮忙解答啊。 另外activemq官网上的那个openwire-c客户端代码“http://svn.apache.org/repos/asf/activemq/sandbox/openwire-c/”如何编译呢?在编译过程中需要jdk支持么?我是弄java的,c只是本科时学过,不太会怎么用。
不一定一定要有java环境,用别的语言只要遵守mq的协议就可以了。activemq还支持一些公开的协议,就是说可以在不是自己的协议的第三方协议中通信。 openwire-c 等开源也可以在windows编译,可能要cygwin等,这个要看一下编译的文档,熟悉gcc
ziweige 2013-09-05
  • 打赏
  • 举报
回复
楼主,你好。 我最近也在弄这个activemq。有一个问题没有弄清楚。 两台主机(无论是windows还是linux的)我都可以用java实现通信。但是我不太清楚用c怎么实现的。例如我在windows主机上使用java客户端,安装activemq,而在另一台主机上我不安装activemq(两台主机通信一般也只需要一个activemq就够了),也不安装jdk(因为这台主机不打算使用java编写客户端),是否只需要安装支持mq的运行库就够了,自己来写c客户端呢?不知道这种想法是否正确?还请大神帮忙解答啊。 另外activemq官网上的那个openwire-c客户端代码“http://svn.apache.org/repos/asf/activemq/sandbox/openwire-c/”如何编译呢?在编译过程中需要jdk支持么?我是弄java的,c只是本科时学过,不太会怎么用。
cronzb 2013-04-17
  • 打赏
  • 举报
回复
按 chinaunix的方法,加了--start-group就可以连接过去了,谢谢各位!
cronzb 2013-04-16
  • 打赏
  • 举报
回复
引用 2 楼 ouyh12345 的回复:
用nm -D看so的导出
nm 和 objdump 都用了,显示是正常的,里面的函数都有
cronzb 2013-04-16
  • 打赏
  • 举报
回复
引用 1 楼 pathuang68 的回复:
activemq问题还是蛮多的...
nm 和 objdump 都用了,显示是正常的,里面的函数都有
hznat 2013-04-16
  • 打赏
  • 举报
回复
引用 2 楼 ouyh12345 的回复:
用nm -D看so的导出
++
ouyh12345 2013-04-16
  • 打赏
  • 举报
回复
用nm -D看so的导出
pathuang68 2013-04-16
  • 打赏
  • 举报
回复
activemq问题还是蛮多的...

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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