我正在将Xilinx Zynq板从CodeSourcery armel (gnueabi)工具链(从Vivado 2015.2)迁移到Linaro armhf,因此我们可以安装Debian/Ubuntu armhf (gnueabhf)。
当试图将dlopen()
和dlsym()
共享库时,我们从dlerror()
得到下一个错误:
/.../controller.so: undefined symbol: _ZTVN10__cxxabiv119__pointer_type_infoE
如果使用Linaro工具链,而使用CodeSourcery工具链编译的软件正常工作,则存在问题。
我检查了两个库中报告的符号,它都存在:
$ grep -r cxxabiv119__pointer_type_info .
./controller.so.armel.simbols:U _ZTVN10__cxxabiv119__pointer_type_infoE
./controller.so.armhf.simbols:U _ZTVN10__cxxabiv119__pointer_type_infoE
似乎如果控制器。所以只包含C代码(没有c++代码),它可以与Linaro正常工作。但区别可能在于语言之外。
问候,Iztok Jeras
这个问题没有简单的答案,最后我从交叉编译切换到QEMU模拟ARM环境中的本机编译器。这是许多树莓派用户建议的。另一方面,每一个交叉编译的解决方案都会暴露出一组新的问题。