我正在编译一些开源代码,它给了我以下错误:
g++: error: /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crti.o: No such file or directory
这表明正在使用的版本是4.1.2
。但是,当我执行:which g++
时,输出为:/opt/gcc/4.9.2/bin/g++
。这表明正在使用4.9.2。我很困惑,有人能帮我理解发生了什么吗?我没有做过很多unix。
答案 0 :(得分:1)
您的路径/opt/gcc/4.9.2/bin/g++
表明这不是作为您正在使用的Linux发行版(或Unix)的一部分打包的gcc。相反,这是与您的发行版的gcc一起编译和安装的不同版本的gcc。 gcc在本机Linux发行版上的典型路径是/usr/bin/g++
。
gcc是一个非常庞大,复杂的软件包。它预计会被构建和配置为本机Linux发行版的一部分。当然可以配置和构建不同版本的gcc,以补充Linux发行版附带的版本。我之前已经完成了几个过程,但这是一个漫长,复杂,痛苦的过程。没有cookie-cutter的配方,细节因主机Linux发行版而异。
每次都是一种全新的体验。很多时候,gcc的配置脚本会出现一些细节错误,并且必须最终修补gcc配置脚本的某些部分,以便在主机发行版上正确构建gcc。
当出现问题时,你会得到像这样的典型结果 - 一条断开的链接路径。有时您最终会遇到头文件或其他一些问题。
因此,为了构建gcc,必须具备丰富的开发经验,同时还要构建大型复杂的免费软件包。为了构建gcc,我必须对用于构建gcc的GNU工具链以及数以千计的其他免费软件包有广泛的了解和理解:autoconf
,automake
,libtool
,并且,根据所涉及的软件包,可能还有其他几个。
因此,您需要与经验丰富的系统管理员或开发人员团队联系,他们最初构建了自定义安装的gcc 4.9.2并将其安装在/ opt中,然后向他们展示您遇到的此错误,并且让他们弄清楚gcc是如何配置错误的,所以它最终导致错误链接。
答案 1 :(得分:1)
一个简单的解决方案是编译并运行该程序:
#include <iostream>
int main()
{
std::cout << __VERSION__ << std::endl;
}
这将打印用于编译程序的g ++版本。
这里__VERSION__
是由g ++定义的宏。