【问题标题】:My cross-compiler cannot find a shared library我的交叉编译器找不到共享库
【发布时间】:2017-06-07 14:44:58
【问题描述】:

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

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

【问题讨论】:

  • but the cross-compiler is not liking it (undefined reference errors)未定义的引用表示链接器已找到为其指定的所有库,但这些库中没有一个包含所需的符号。请edit您的问题并在其中添加精确的错误消息
  • 请注意,链接器并不关心它被调用的原因。 cmake 可以很方便,但不能变魔术。

标签: c++ eclipse cmake cross-compiling


【解决方案1】:

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

本质上,我想使用一个库 (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)时,这似乎是使用他人共享库的正确方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-12
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 2022-07-18
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    相关资源
    最近更新 更多