2017-01-23 139 views
2

我在Debian VM上用Eclipse編碼,併爲Raspberry Pi Zero交叉編譯。我想使用mraa圖書館,但經過數小時的努力後,我仍然無法完成工作。 - 關於目標(Raspi零),我可以使用CMake在本地編譯mraa,只需遵循作者的指示。當我在本地玩C++示例時,它完美地工作。 - 在主機上,我複製了來自目標的* .so文件,但交叉編譯器不喜歡它(未定義的引用錯誤)。在Eclipse設置中,我將頭文件目錄添加到包含路徑中,將共享lib目錄添加到庫搜索路徑(-L),並添加了-lmraa標誌。我的交叉編譯器找不到共享庫

我在做什麼錯?我應該使用CMake在主機上編譯MRAA嗎?如果是這樣,我如何用CMake定義我的交叉編譯器?

+0

'但交叉編譯器不喜歡它(未定義的引用錯誤)'。 **未定義的引用**意味着鏈接器已經**找到了爲它指定的所有庫**,但這些庫都不包含所需的符號。請,[編輯]你的問題,並添加**精確的錯誤信息**。 – Tsyvarev

+0

請注意,鏈接器不關心爲什麼它被調用。 'cmake'可以很方便,但它不能做到魔法。 – MSalters

回答

0

對不起,不編輯我的問題早,但有時問題就變成了,一旦你找到答案清晰僅...

從本質上講,我想用一個庫(MRAA),而過去我的源代碼和一個cmake文件。我認爲我可以簡單地在目標上運行cmake(我的RasPi Zero),然後將.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

這似乎是用別人的共享庫的正確方法時,編譯版本不存在您的目標(在我的情況下,一個樹莓派零)。