当从CodeSourcery armel移植到Linaro armhf编译器时遇到共享库问题

问题描述:

我正在将Xilinx Zynq板从CodeSourcery armel(gnueabi)工具链(从Vivado 2015.2)迁移到Linaro armhf,因此我们可以安装Debian/Ubuntu armhf gnueabihf)。当从CodeSourcery armel移植到Linaro armhf编译器时遇到共享库问题

在尝试dlopen()dlsym()共享库,我们从dlerror()获得下一个错误:如果使用的工具链Linaro的同时与CodeSourcery的工具链编译的软件正常工作

/.../controller.so: undefined symbol: _ZTVN10__cxxabiv119__pointer_type_infoE 

这个问题是存在的。

我检查报告的符号都库和它在这两个存在:

$ 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 

看来,如果controller.so只包含C代码(没有C++代码),它的工作原理与properry Linaro的。但是这种差异可能与使用的语言不同。

问候, Iztok Jeras

+0

这是关于如何打开该库的详细信息: app-> handle = dlopen(app_file,RTLD_LAZY); –

+0

不要使用grep;使用'objdump'来列出符号。您可能会发现破碎的库使用该符号,但没有定义它。 – ams

有没有简单的答案对这个问题,我到底从交叉编译切换到QEMU内本地编译器ARM仿真环境。这是各种树莓派用户提出的建议。另一方面,每个交叉编译器解决方案刚刚发现了一系列新问题。