2013-06-12 131 views
1

我試圖交叉編譯ARM處理器系統的項目。我可以通過建設步驟,但在鏈接上失敗。交叉編譯:鏈接到mysql,liblog4cpp等

有問題的應用程序鏈接liblog4cpplibmysql。爲了使構建能夠正常工作,我從ARM系統中拷貝了相關文件,但似乎存在運行時依賴關係。具體錯誤:

/usr/lib/gcc/arm-linux-gnueabi/4.4.5/../../../../arm-linux-gnueabi/bin/ld: 
    warning: libz.so.1, needed by /usr/lib/mysql_arm/libmysqlclient.so, 
    not found (try using -rpath or -rpath-link) 
/usr/lib/mysql_arm/libmysqlclient.so: undefined reference to `compress' 
/usr/lib/mysql_arm/libmysqlclient.so: undefined reference to `uncompress' 
collect2: ld returned 1 exit status 

在我的構建步驟我鏈接到libz.so而是利用-rpath的建議使我不知道如果MySQL庫需要一個運行時的鏈接。如果我在構建系統上設置了這個值,當它在運行系統中找不到相應的路徑時,會不會感到不安?

另外 - 有沒有辦法使用apt-get安裝其他目標文件?我從emdebian安裝了交叉編譯器,但是我沒有看到爲特定目標獲取庫文件而無需重新編譯構建系統的方法。

回答

1

爲後人:如果您想包括其他圖書館和碰上這種錯誤消息:

使用-rpath-link指向包含您額外的運行時庫文件夾(S)。需要注意的是,您的構建語句(在這種情況下,arm-linux-gnueabi-g ++)必須在-W1,之前命令。所以最終的命令看起來像這樣:

arm-linux-gnueabi-g++ -Wall -O0 <other params here> file0.o file1.o 
    -Wl,-rpath-link /usr/lib/<path to arm library for run-time> 
    -L <some other library path> -l <something like mysql or bluetooth> 

重要的部分是第二行。這可以在構建機器上和在其上運行的機器上正確解決。