我的交叉编译器找不到共享库

时间:2017-01-23 06:31:08

标签: c++ eclipse cmake cross-compiling

我在Debian VM上使用Eclipse进行编码,并为Raspberry Pi Zero进行交叉编译。我想使用mraa库,但经过几个小时的努力,我仍然无法使它成功。 - 在目标上(Raspi为零)我可以使用CMake在本地编译mraa,只需按照作者的说明操作即可。当我在本地使用c ++示例时它非常有效。 - 在主机上,我从目标复制了* .so文件,但是交叉编译器不喜欢它(未定义的引用错误)。在Eclipse设置中,我将头目录添加到包含路径,将共享库目录添加到库搜索路径(-L),然后添加了-lmraa标志。

我做错了什么?我是否应该使用CMake在主机上编译MRAA?如果是这样,我如何使用CMake定义交叉编译器?

1 个答案:

答案 0 :(得分:0)

很抱歉没有提前编辑我的问题,但有时只有在找到答案后问题才会变得清晰......

基本上,我想使用一个库(MRAA),我有源代码和一个cmake文件。我以为我可以简单地在目标上运行cmake(我的RasPi Zero),然后将.so(共享库)文件传输到我的主机,以便与Eclipse进行交叉编译。但它没有用。

所以我在主机上使用cmake编译了库。要使其工作,您需要提供指向交叉编译器的链接以及指向与目标类似的根文件系统的链接,因为所有依赖项。所以我创建了一个toolchain.cmake文件来定义所有内容,并在运行cmake时将此工具链文件作为选项调用。

这里解释了一切:http://www.vtk.org/Wiki/CMake_Cross_Compiling

此处提供了交叉编译器和根文件系统: https://github.com/raspberrypi/tools/tree/master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64

当你的目标不存在编译版本时,这似乎是使用别人共享库的正确方法(在我的例子中,是一个Raspberry Pi Zero)。