最近项目中需要用的live555框架. 在使用过程中遇到的问题记录下来. live555主要有四个组件:
四个目录,分别对应Live555的四个库:
UsageEnvironment目录,生成的静态库为libUsageEnvironment.a,这个库主要包含一些基本数据结构以及工具类的定义
groupsock目录,生成的静态库为libgroupsock.a,这个库主要包含网络相关类的定义和实现
liveMedia目录,生成的静态库为libliveMedia.a,这个库包含了Live555核心功能的实现
BasicUsageEnvironment目录,生成的静态库为libBasicUsageEnvironment.a,这个库主要包含对UsageEnvironment库中一些类的实现.
在testProgs目录中是一些应用的例子, 编译testRTSPClient.cpp, 生成RTSP视频流拉流客户端. 编译的依赖库文件就是上面提到的4个静态库. 但是奇怪的是一直会提示错误:
../../../live555/liveMedia/libliveMedia.a(Media.o): In function `MediaLookupTable::ourMedia(UsageEnvironment&)':
Media.cpp:(.text+0x1d8): undefined reference to `HashTable::create(int)'
../../../live555/liveMedia/libliveMedia.a(Media.o): In function `MediaLookupTable::MediaLookupTable(UsageEnvironment&)':
Media.cpp:(.text+0x472): undefined reference to `HashTable::create(int)'
../../../live555/liveMedia/libliveMedia.a(RTCP.o): In function `RTCPMemberDatabase::reapOldMembers(unsigned int)':
RTCP.cpp:(.text+0xd3c): undefined reference to `HashTable::Iterator::create(HashTable const&)'
../../../live555/liveMedia/libliveMedia.a(RTCP.o): In function `RTCPInstance::RTCPInstance(UsageEnvironment&, Groupsock*, unsigned int, unsigned char const*, RTPSink*, RTPSource*, unsigned char)':
最后排查是因为链接库文件的顺序问题, 解决方法有两个:
1. 把链接库顺序改成-lliveMedia -lBasicUsageEnvironment -lgroupsock -lUsageEnvironment
2. 在编译链接库前后加上-Wl,--start-group 和 -Wl,--end-group, 也就是: -Wl,--start-group -lliveMedia -lBasicUsageEnvironment -lgroupsock -lUsageEnvironment -Wl,--end-group