2016-02-08 170 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(上面鏈接)並指出它做錯了什麼。