2010-06-04 88 views
10

當您不希望標準路徑中的標題/庫影響您的構建時,--sysroot開關非常有用。替代gs的--sysroot開關?

--sysroot=dir:使用dir作爲標題和 庫的邏輯根目錄。例如,如果 編譯器通常在/ usr/include中搜索 頭文件,並在/ usr/lib中搜索庫文件 ,則它將代替搜索 dir/usr/include和dir/usr/lib。 [ref]

可同樣的事情,通過使用環境變量來實現,該的Specs文件,或者不需要命令行開關的任何其他方法?

回答

7

如果你可以使用環境變量,你可以添加--sysroot到CFLAGS。

3

你可以在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,使用相同的方案。

+0

這是我嘗試交叉編譯AXIS2/C時唯一的解決方案。出於一些神祕的原因,AXIS2/C的makefile只是在鏈接sharedlib時剝離了我放入CFLAGS,LDFLAGS和LIBS環境變量的「--sysroot」選項。我也嘗試禁用與./configure --disable-shared選項共享,但鏈接器會在最後的鏈接階段抱怨「重複符號」錯誤。 – RichardLiu 2013-09-14 07:05:34

+0

@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