gcc的--sysroot开关的替代方案?

gcc的--sysroot开关的替代方案?,gcc,path,header,Gcc,Path,Header,当您不希望标准路径中的头/库影响构建时,--sysroot开关非常有用 --sysroot=dir:使用dir作为标头和 图书馆。例如,如果 编译器通常会搜索 /usr/include和库中的标题 在/usr/lib中,它将改为搜索 dir/usr/include和dir/usr/lib 同样的事情可以通过使用环境变量、gcc规范文件或任何其他不需要命令行开关的方法来完成吗?如果可以使用环境变量,可以将--sysroot添加到CFLAGS中。可以在gcc周围创建一个包装器脚本,使用所需的标志执行

当您不希望标准路径中的头/库影响构建时,
--sysroot
开关非常有用

--sysroot=dir
:使用dir作为标头和 图书馆。例如,如果 编译器通常会搜索 /usr/include和库中的标题 在/usr/lib中,它将改为搜索 dir/usr/include和dir/usr/lib


同样的事情可以通过使用环境变量、gcc规范文件或任何其他不需要命令行开关的方法来完成吗?

如果可以使用环境变量,可以将--sysroot添加到CFLAGS中。

可以在gcc周围创建一个包装器脚本,使用所需的标志执行实际的gcc。这适用于弄乱环境变量的makefile和复杂构建。您只需要确保您的gcc脚本在路径中早于实际的gcc二进制文件。剧本本身只有两行

#!/bin/sh
exec /usr/bin/gcc --sysroot=/your/sysroot "$@"
如果
$HOME/bin
在您的路径的早期,您可以将脚本放入
$HOME/bin
,它不会影响任何其他用户

如果您有一个在
/usr/bin/
中明确查找
gcc
configure
脚本,您可能需要将
/usr/bin/gcc
重命名为
/usr/bin/gcc.bin
,并将脚本命名为
/usr/bin/gcc
。这将影响所有用户。如果您需要它,但又希望它只影响某些用户,请使用

#!/bin/sh
[ "$(id -un)" -eq "theuser" ] && exec /usr/bin/gcc.bin --sysroot=/your/sysroot "$@"
exec /usr/bin/gcc.bin "$@"

您可以使用相同的方案进行变体,例如特定的用户帐户或组成员身份来设置特定的系统根。

这是我尝试交叉编译AXIS2/C时的唯一解决方案。出于一些神秘的原因,AXIS2/C的makefile刚刚删除了我在CFLAGS中的“-sysroot”选项,链接sharedlib时的LDFLAGS和LIBS环境变量。我还试图禁用与共享。/configure--disable shared选项,但链接器会在最后的链接阶段抱怨“复制符号”错误。@RichardLiu:如果为AXIS2/C 1.6.0运行
util/autogen.sh
,它会生成一个新的
--带有sysroot=DIR
configure选项。不过,它看起来只传递给了libtool。添加
——使用cflags sysroot
configure选项(每个
configure.ac
中大约30行)似乎可以工作。你想试试那个补丁吗?整个项目似乎过时了,因为它尝试在我的开发机器上编译的第一个文件(
util/src/platforms/unix/uuid\u gen\u unix.c
)失败。。