Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何强制已安装的gcc ar使用特定的binutils版本?_C++_Linux_Gcc_Binutils - Fatal编程技术网

C++ 如何强制已安装的gcc ar使用特定的binutils版本?

C++ 如何强制已安装的gcc ar使用特定的binutils版本?,c++,linux,gcc,binutils,C++,Linux,Gcc,Binutils,我已经从源代码中构建了gcc4.9.3,并用一些前缀安装到我的主目录中,例如,gcc4.9 现在我想使用更新版本的binutils以及GCC4.9.3。我构建了它们,并分别安装在我的主目录中,前缀为binutils2.26 如何强制gcc-arfromgcc4.9使用arfrombinutils2.26而不是system one?它总是调用/usr/bin/ar,看起来没有可指定的选项。以某种方式替换/usr/bin/ar不是一个选项-我在此计算机上没有root访问权限。使用GCC的-B标志,并

我已经从源代码中构建了gcc4.9.3,并用一些前缀安装到我的主目录中,例如,
gcc4.9

现在我想使用更新版本的
binutils
以及GCC4.9.3。我构建了它们,并分别安装在我的主目录中,前缀为
binutils2.26


如何强制
gcc-ar
from
gcc4.9
使用
ar
from
binutils2.26
而不是system one?它总是调用
/usr/bin/ar
,看起来没有可指定的选项。以某种方式替换
/usr/bin/ar
不是一个选项-我在此计算机上没有root访问权限。

使用GCC的
-B
标志,并将其指向包含要执行的
ar
的目录。有关此标志的详细信息,请参阅

gcc-ar -B/path/to/your/dir ...
这似乎对我有用:

$ strace -f -eexecve gcc-ar rc foo.a /dev/null |& grep /ar
[pid 14485] execve("/usr/lib/gcc/x86_64-pc-linux-gnu/5.3.0/../../../../x86_64-pc-linux-gnu/bin/ar", [...]) = 0
$ strace -f -eexecve gcc-ar rc foo.a /dev/null -B/usr/bin |& grep /ar
[pid 14493] execve("/usr/bin/ar", [...]) = 0
$ strace -f -eexecve gcc-ar rc foo.a /dev/null -B/usr/x86_64-pc-linux-gnu/binutils-bin/2.26/ |& grep /ar
[pid 14500] execve("/usr/x86_64-pc-linux-gnu/binutils-bin/2.26/ar", [...]) = 0

使用GCC的
-B
标志,并将其指向包含要执行的
ar
的目录。有关此标志的详细信息,请参阅

gcc-ar -B/path/to/your/dir ...
这似乎对我有用:

$ strace -f -eexecve gcc-ar rc foo.a /dev/null |& grep /ar
[pid 14485] execve("/usr/lib/gcc/x86_64-pc-linux-gnu/5.3.0/../../../../x86_64-pc-linux-gnu/bin/ar", [...]) = 0
$ strace -f -eexecve gcc-ar rc foo.a /dev/null -B/usr/bin |& grep /ar
[pid 14493] execve("/usr/bin/ar", [...]) = 0
$ strace -f -eexecve gcc-ar rc foo.a /dev/null -B/usr/x86_64-pc-linux-gnu/binutils-bin/2.26/ |& grep /ar
[pid 14500] execve("/usr/x86_64-pc-linux-gnu/binutils-bin/2.26/ar", [...]) = 0

我设法解决了这个问题

使用
strace
,我发现
gcc-ar
在多个目录中查找
ar
,包括
/libexec/gcc/x86\u 64-redhat-linux/4.9.3

因此,显而易见的解决方案是在此目录中创建指向相应的
binutils2.26
可执行文件的链接:

cd”/libexec/gcc/x86_64-redhat-linux/4.9.3“
对于~/binutils2.26/bin/*中的文件;do ln-s“${file}”;完成

在这之后,
~/binutils2.26/bin
中的可执行文件将作为链接复制到GCC 4.9.3目录中,并在按该GCC版本构建时自动使用。

我设法解决了这个问题

使用
strace
,我发现
gcc-ar
在多个目录中查找
ar
,包括
/libexec/gcc/x86\u 64-redhat-linux/4.9.3

因此,显而易见的解决方案是在此目录中创建指向相应的
binutils2.26
可执行文件的链接:

cd”/libexec/gcc/x86_64-redhat-linux/4.9.3“
对于~/binutils2.26/bin/*中的文件;do ln-s“${file}”;完成

在这之后,
~/binutils2.26/bin
中的可执行文件将作为链接复制到GCC 4.9.3目录中,并在使用该GCC版本进行构建时自动使用。

您应该意识到,在构建系统中,实际上(不允许它调用默认的GCC ar)。如何?我调用
/home/foo/gcc4.9/gcc-ar
,但它仍然调用
/usr/bin/ar
“如何?我调用
/home/foo/gcc4.9/gcc-ar
”调用
/home/foo/binutils2.26/ar
。它是否允许在为静态库编译对象时使用
-flto
标志?抱歉,这超出了我的知识范围,关于这个话题,我需要自己做一些更深入的研究。您可能需要澄清有关该特定要求的问题。我只是想指出,通过在构建系统中设置相应的工具链定义变量(
SAR
或其他任何变量),可以轻松地调用特定的
ar
版本。您应该意识到,在构建系统中,实际上(不允许它调用默认的gcc-ar)。如何实现?我调用
/home/foo/gcc4.9/gcc-ar
,但它仍然调用
/usr/bin/ar
“如何?我调用
/home/foo/gcc4.9/gcc-ar
”调用
/home/foo/binutils2.26/ar
。它是否允许在为静态库编译对象时使用
-flto
标志?抱歉,这超出了我的知识范围,关于这个话题,我需要自己做一些更深入的研究。您可能需要澄清有关该特定要求的问题。我只想指出,通过在构建系统中设置相应的工具链定义变量(
SAR
或其他任何变量),可以轻松地调用特定的
ar
版本。不幸的是,这对我不起作用,
gcc ar
只是将此标志传递给
/usr/bin/ar
…你救了我一天!:)不幸的是,这对我不起作用,
gcc-ar
只是将此标志传递给
/usr/bin/ar
…你救了我一天!:)