當您不希望標準路徑中的標題/庫影響您的構建時,--sysroot
開關非常有用。替代gs的--sysroot開關?
--sysroot=dir
:使用dir作爲標題和 庫的邏輯根目錄。例如,如果 編譯器通常在/ usr/include中搜索 頭文件,並在/ usr/lib中搜索庫文件 ,則它將代替搜索 dir/usr/include和dir/usr/lib。 [ref]
可同樣的事情,通過使用環境變量來實現,該的Specs文件,或者不需要命令行開關的任何其他方法?
當您不希望標準路徑中的標題/庫影響您的構建時,--sysroot
開關非常有用。替代gs的--sysroot開關?
--sysroot=dir
:使用dir作爲標題和 庫的邏輯根目錄。例如,如果 編譯器通常在/ usr/include中搜索 頭文件,並在/ usr/lib中搜索庫文件 ,則它將代替搜索 dir/usr/include和dir/usr/lib。 [ref]
可同樣的事情,通過使用環境變量來實現,該的Specs文件,或者不需要命令行開關的任何其他方法?
如果你可以使用環境變量,你可以添加--sysroot到CFLAGS。
你可以在gcc周圍創建一個包裝腳本,它用你希望的標誌執行實際的gcc。這適用於Makefile和複雜的構建,這些構建會混淆環境變量。你只需要確保你的gcc腳本比實際的gcc二進制文件早於PATH。腳本本身就是兩條線,
#!/bin/sh
exec /usr/bin/gcc --sysroot=/your/sysroot "[email protected]"
如果$HOME/bin
是早在你的路徑,你可以把腳本$HOME/bin
,它不會影響任何其他用戶。
如果你有一個configure
腳本,在/usr/bin/
明確查找gcc
,您可能需要重命名/usr/bin/gcc
到/usr/bin/gcc.bin
,並命名你的腳本/usr/bin/gcc
。這會影響所有用戶。如果你需要這個,也想影響只有特定用戶或用戶,使用
#!/bin/sh
[ "$(id -un)" -eq "theuser" ] && exec /usr/bin/gcc.bin --sysroot=/your/sysroot "[email protected]"
exec /usr/bin/gcc.bin "[email protected]"
你可以做的變種,例如特定用戶帳戶或組成員資格來設置特定的sysroot,使用相同的方案。
這是我嘗試交叉編譯AXIS2/C時唯一的解決方案。出於一些神祕的原因,AXIS2/C的makefile只是在鏈接sharedlib時剝離了我放入CFLAGS,LDFLAGS和LIBS環境變量的「--sysroot」選項。我也嘗試禁用與./configure --disable-shared選項共享,但鏈接器會在最後的鏈接階段抱怨「重複符號」錯誤。 – RichardLiu 2013-09-14 07:05:34
@RichardLiu:如果你爲AXIS2/C 1.6.0運行'util/autogen.sh',它會增加一個新的--with-sysroot = DIR'配置選項。但它看起來像只傳遞給libtool。添加'--with-cflags-sysroot'配置選項(每個'configure.ac'中大約有30行)似乎工作正常。你想試試這個補丁嗎?整個項目似乎過時了,因爲它在我的開發機上嘗試編譯的第一個文件('util/src/platforms/unix/uuid_gen_unix.c')失敗。 – 2013-09-14 08:19:11