2016-02-08 91 views
0

我正试图在Linux x86-64主机上交叉编译Android的qhull库。我对CMake相当陌生,但对其他构建系统工具颇有经验。与CMake交叉编译包:如何设置链接器路径来查找编译器支持库?

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

在我的工具链文件,当中的事情我已经试过有:

  • CMAKE_FIND_ROOT_PATH
  • link_directories()
  • CMAKE_EXE_LINKER_FLAGS

我看不出有什么不寻常的至少相对于第一个故障点(user_eg3)而言是至少相对于第一个故障点(user_eg3)。

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

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

+0

将所需的库添加到工具链文件中的'CMAKE_EXE_LINKER_FLAGS'变量不会有帮助吗?奇怪。作为最后的手段,您可以设置指向脚本的'CMAKE_CXX_COMPILER'(或'CMAKE_C_COMPILER'),该脚本使用附加标志调用原始编译器。 – Tsyvarev

+0

不,在我的工具链文件中设置CMAKE_EXE_LINKER_FLAGS不会影响此命令。我也觉得很奇怪。我想也许这个软件包的CMakeLists.txt在某种程度上压倒了这一点,但我没有注意到它做了这样的事情。我*是*设置CMAKE_CXX_COMPILER,但是你说我可以在该调用中添加标志,以及? –

回答

1

我找到了解决方法。

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

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