2012-04-03 58 views
1

請原諒我,如果我失去了一些東西很明顯這裏。我正在爲另一個平臺開發一些應用程序,我所有的專有庫都安裝到/ app/lib。爲了實現這一點,我將每個二進制文件的運行時庫路徑指定爲「/ app/lib」。這工作正常;然而,它需要鏈接時(即使該目錄爲空),我的構建環境中存在路徑「/ app/lib」。我使用的是NetBeans,這可能會讓事情變得複雜,但我可以看到「-Wl,-rpath/app/lib」被傳遞給gcc。RPATH必須存在在編譯時

我想避免需要創建一個空的「/應用程序/ lib目錄」在我的編譯環境,但我不想改變我的目標平臺上的文件結構。如果我從構建環境中刪除/ app/lib,則在構建它時無法找到該錯誤。有沒有辦法指定一個運行時搜索路徑,而不需要它在鏈接時存在?

+1

'-Wl,-rpath /應用/ lib'是一個不正確的選項規範,應該是'-Wl,-rpath -Wl,/應用/ lib'(也許還有其他的方式,但這個工程並沒有需要構建主機上的目錄)。你在這裏錯誤地複製了你的構建選項嗎? – Mat 2012-04-03 15:18:56

+0

我回去複查了,但是我確認這個調用正在構建爲「gcc -o ... -Wl,-rpath/app/lib ...」。 NetBeans正在構建這個makefile,所以如果它是無效的,它可能需要修復它們的結尾。然而,如果/ build/lib存在於我的構建環境中,構建過程會成功,並且生成的二進制文件在運行時使用該路徑。 – LousyG 2012-04-03 15:28:18

+0

奇怪......我雖然沒有工作。我稍後會看到我是否可以複製,看起來有點奇怪。 – Mat 2012-04-03 15:45:52

回答

1

的語法應該是 「-Wl,-rpath -Wl,/應用/ lib目錄」( 「-Wl,-rpath,/應用/ lib目錄」 的作品太)。這是NetBeans中的一個錯誤。之所以沒有更重要的原因(以及之前爲什麼我沒有注意到這一點)是因爲鏈接時間搜索路徑似乎會延續到運行時。由於NetBeans不會在-rpath和/ app/lib之間放置逗號,因此將/ app/lib解釋爲鏈接時搜索路徑。因此,我的依賴庫仍然在運行時找到適當的位置,但由於它是鏈接時間依賴關係,鏈接失敗,因爲/ app/lib不存在。

1

我認爲你正在尋找的選項-Wl,-rpath-link,/path/to/libraries。您需要一次使用兩個選項。

連接器將然後使用-rpath-link找到在鏈接時庫,但它會在-rpath值編碼成二進制在運行時使用。