基于RTP(实时传输协议)的测试程序链接错误求助
解决ccrtp编译时的链接错误问题
看起来你遇到的是链接器无法找到ccrtp依赖的ucommon库符号的问题,从错误信息里的undefined reference to symbol '_ZNK7ucommon14JoinableThread9is_activeEv'和DSO missing from command line就能看出来——libccrtp依赖libucommon库,但你编译时只指定了链接ccrtp,没把它的依赖库也加进去。
直接解决方案:修改编译命令
把编译命令里加上-lucommon选项,告诉链接器同时链接ucommon库:
g++ -v main.cpp -o rtp -lccrtp -lucommon
更稳妥的方法:用pkg-config自动处理依赖
如果系统里安装了pkg-config,可以直接用它来获取ccrtp所有的编译和链接参数,这样就不会遗漏任何依赖:
g++ -v main.cpp -o rtp $(pkg-config --cflags --libs ccrtp)
这个命令会自动展开成包含ccrtp及其所有依赖库的编译选项,比手动加更可靠。
为什么会出现这个错误?
链接器在处理动态库时不会自动递归查找依赖的库,libccrtp编译时依赖了libucommon的函数(比如错误里的线程状态检查函数),所以必须在编译命令里明确指定要链接libucommon,否则链接器找不到这些符号就会报错。
内容的提问来源于stack exchange,提问作者MWende
相关产品推荐
相关产品推荐

