Ubuntu 16.04编译Mbuni遇error adding symbols错误的解决求助
解决Ubuntu 16.04下Mbuni编译时的链接错误
错误原因分析
你遇到的问题是典型的静态库未使用-fPIC编译导致无法链接共享库的场景,错误提示已经明确指出了根源:
/usr/bin/ld: /usr/local/lib/kannel/libwap.a(wsp_headers.o): relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC
Mbuni编译时需要生成共享库(libmms.so),但依赖的Kannel静态库libwap.a在编译时没有添加-fPIC参数,导致64位系统下无法生成位置无关的共享对象,最终触发链接错误。
解决方案
要修复这个问题,核心是重新编译Kannel并强制添加-fPIC参数,再重新编译Mbuni,具体步骤如下:
1. 清理现有Kannel安装
如果之前已经安装了Kannel,先彻底清理残留文件:
# 卸载已安装的Kannel(进入Kannel源码目录执行) sudo make -C /path/to/your/kannel-source uninstall # 删除残留的库和头文件 sudo rm -rf /usr/local/lib/kannel/ sudo rm -rf /usr/local/include/kannel/
2. 重新编译带-fPIC参数的Kannel
获取与Mbuni版本兼容的Kannel源码,进入源码目录后执行:
./bootstrap # 关键:添加--with-cflags=-fPIC确保生成位置无关代码 ./configure --with-cflags=-fPIC --enable-shared make sudo make install
--enable-shared参数会同时生成Kannel的共享库,能避免后续类似的静态库链接问题。
3. 重新编译Mbuni
回到Mbuni源码目录,清理之前的编译残留后重新执行编译流程:
make clean ./bootstrap ./configure --with-cflags=-fPIC --enable-shared make sudo make install
验证
编译完成后,可以通过以下命令检查生成的共享库是否正常:
ldd /usr/local/lib/libmms.so
如果输出中没有出现链接错误提示,说明问题已解决。
内容的提问来源于stack exchange,提问作者Shofiqul Alam
相关产品推荐
相关产品推荐

