【问题标题】:Cross-compiling package with CMake: how to set linker path to find compiler support library?使用 CMake 交叉编译包:如何设置链接器路径以查找编译器支持库?
【发布时间】:2016-02-08 19:51:07
【问题描述】:

我正在尝试在 Linux x86-64 主机上交叉编译适用于 Android 的 qhull 库。我对 CMake 还很陌生,但对其他构建系统工具颇有经验。

根据我找到的所有建议,我已经设置了一个工具链文件,并且它适用于其他几个包。然而,无论我尝试什么,似乎都没有增加 qhull 的一个或多个可执行程序的链接器路径。问题是它找不到 Android NDK 的 libsup++.a,这是其编译器 (GCC) 的隐式依赖项。如果我使用生成的链接命令并手动添加-Lpath_to_libsup++.a,则链接成功。

在我的工具链文件中,我尝试过的有:

  • CMAKE_FIND_ROOT_PATH
  • link_directories()
  • CMAKE_EXE_LINKER_FLAGS

我看不出它的 CMakeLists.txt 有什么不寻常之处,至少在第一个故障点 (user_eg3) 方面。

如果可能的话,我不想修补库。我知道很多其他人在 Android 上使用它(它是点云库的依赖项),所以我想我可能错过了一步。

顺便说一句,我正在使用 CMake v3.4.3、Android NDK r10e 和 qhull v7.2.0。

【问题讨论】:

  • 将所需库添加到工具链文件中的CMAKE_EXE_LINKER_FLAGS 变量没有帮助?奇怪的。作为最后的手段,您可以将CMAKE_CXX_COMPILER(或CMAKE_C_COMPILER)设置为指向您的脚本,该脚本使用附加标志调用原始编译器。
  • 否,在我的工具链文件中设置 CMAKE_EXE_LINKER_FLAGS 不会影响此命令。我也觉得很奇怪。我想也许包的 CMakeLists.txt 以某种方式覆盖了它,但我没有注意到它在做任何类似的事情。我正在设置 CMAKE_CXX_COMPILER,但你是说我也可以在该调用中添加标志?

标签: android c++ linux android-ndk cmake


【解决方案1】:

我找到了解决方法。

this post 中,Florian 提到 CMake 在内部将 CMAKE_EXE_LINKER_FLAGS_INIT 设置为 $ENV{LDFLAGS}。我发现如果我设置环境变量 LDFLAGS=-Lpath_to_libsup++.a,它会被传递给链接命令,现在成功了。

我仍然想知道这个问题的正确 CMake 解决方案。或者,如果问题出在 qhull 上,那么也许有人可以查看它的 CMakeLists.txt(上面链接)并指出它做错了什么。

【讨论】:

    猜你喜欢
    • 2012-07-15
    • 2020-11-11
    • 2021-09-07
    • 1970-01-01
    • 2011-03-25
    • 2013-07-17
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多