我在 Debian VM 上使用 Eclipse 进行编码,并为 Raspberry Pi Zero 进行交叉编译。我想使用 mraa 库,但经过几个小时的努力,我仍然无法让它工作。 - 在目标(Raspi 零)上,我可以使用 CMake 在本地编译 mraa,只需按照作者的说明操作即可。当我在本地玩 C++ 示例时,它工作得很好。 - 在主机上,我从目标复制了 *.so 文件,但交叉编译器不喜欢它( undefined reference 错误)。在 Eclipse 设置中,我将 header 目录添加到包含路径,将共享库目录添加到库搜索路径 (-L),并添加了 -lmraa 标志。
我做错了什么?我应该使用 CMake 在主机上编译 MRAA 吗?如果是这样,我该如何使用 CMake 定义我的交叉编译器?
最佳答案
很抱歉没有早点编辑我的问题,但有时只有找到答案后问题才会变得清晰...
本质上,我想使用一个库 (MRAA),我有它的源代码和一个 cmake 文件。我认为我可以简单地在目标(我的 RasPi Zero)上运行 cmake,然后将 .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)不存在编译版本时,这似乎是使用其他人的共享库的正确方法。
关于c++ - 我的交叉编译器找不到共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41800449/