我與g++
的情況如下。我構建了一個名爲libplugin.so
的共享庫,該庫在運行時由應用程序加載。這libplugin.so
鏈接到一些其他共享庫,與-no-as-needed
鏈接器選項,並鏈接到一個靜態庫。如何在交叉編譯期間強制鏈接到未安裝的庫
由於libplugin.so
本身並不在上市庫使用的任何符號,-no-as-needed
才能使所有需要的庫動態加載器加載 - 這是真的只有靜態庫引用 - 當插件在運行時加載-時間。在我的x86
建築機器上,所有列爲-no-as-needed
的庫都安裝在系統中。所以,圖書館在那裏建得很好,程序也可以。
現在我正在嘗試爲ARM進行交叉編譯,但也存在一些問題,因爲在構建libplugin.so
時,鏈接程序無法在系統中找到指示爲-no-as-needed
的庫。鏈接無法找到這些庫,因爲它們(故意)未安裝。我寧願不安裝它們。
所以這是我的問題。由於libplugin.so
沒有直接引用以任何方式傳遞給-no-as-needed
的庫,有沒有辦法強制鏈接器生成libplugin.so
,儘管傳遞給-no-as-needed
的ARM庫不存在於我的x86構建系統中?
下面是一個例子:
arm-linux-gnueabihf-g++ -o libplugin.so module1.o module2.o -L./libstatic.a -Wl,--no-as-needed -lX11 -lXext -shared -s -fPIC
arm-linux-gnueabihf-ld: cannot find -lX11