2017-01-23 60 views
2

我在Debian VM上用Eclipse编码,并为Raspberry Pi Zero交叉编译。我想使用mraa图书馆,但经过数小时的努力后,我仍然无法完成工作。 - 关于目标(Raspi零),我可以使用CMake在本地编译mraa,只需遵循作者的指示。当我在本地玩C++示例时,它完美地工作。 - 在主机上,我复制了来自目标的* .so文件,但交叉编译器不喜欢它(未定义的引用错误)。在Eclipse设置中,我将头文件目录添加到包含路径中,将共享lib目录添加到库搜索路径(-L),并添加了-lmraa标志。我的交叉编译器找不到共享库

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

+0

'但交叉编译器不喜欢它(未定义的引用错误)'。 **未定义的引用**意味着链接器已经**找到了为它指定的所有库**,但这些库都不包含所需的符号。请,[编辑]你的问题,并添加**精确的错误信息**。 – Tsyvarev

+0

请注意,链接器不关心为什么它被调用。 'cmake'可以很方便,但它不能做到魔法。 – MSalters

回答

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

这似乎是用别人的共享库的正确方法时,编译版本不存在您的目标(在我的情况下,一个树莓派零)。