编译PJSIP的siprtp后运行报错:未定义符号pj_ansi_strxcpy求助
解决PJSIP siprtp运行时undefined symbol: pj_ansi_strxcpy错误
出现这个运行时错误的核心原因是:编译阶段只完成了源码语法检查,但链接阶段没有把包含pj_ansi_strxcpy函数的目标文件或库纳入进来。这个函数属于PJSIP的pjlib组件,你可以通过以下两种方式解决:
方法1:链接pjlib预编译库
PJSIP编译完成后,pjlib会生成对应的库文件,直接在链接时引入即可:
- 找到pjlib的库目录:
~/pjsip/pjproject-2.13/pjlib/lib,里面有静态库libpj.a或动态库libpj.so - 修改你的Makefile:
- 在
CFLAGS中添加pjlib的头文件路径:CFLAGS += -I~/pjsip/pjproject-2.13/pjlib/include - 在
LDFLAGS或LDLIBS中添加库链接参数:LDFLAGS += -L~/pjsip/pjproject-2.13/pjlib/lib -lpj
- 在
- 重新执行
make clean && make即可
方法2:直接编译string.c到目标程序
如果不想依赖预编译库,可以把string.c直接加入编译流程:
- 修改Makefile中的源文件列表,把
string.c的路径加进去,比如:SRCS = siprtp.c siprtp_report.c ~/pjsip/pjproject-2.13/pjlib/src/pj/string.c - 同样要确保
CFLAGS包含pjlib的头文件路径:CFLAGS += -I~/pjsip/pjproject-2.13/pjlib/include - 重新编译即可
注意事项
- 建议优先用方法1,因为PJSIP的pjlib还有其他可能被依赖的函数,直接链接整个库能避免后续出现类似的符号缺失问题
- 如果用相对路径,要确保路径相对于Makefile的位置正确,用绝对路径更稳妥
内容的提问来源于stack exchange,提问作者amirhossein
相关产品推荐
相关产品推荐

