2016-02-01 80 views
1

我編譯一些開源代碼中使用了,它給了我下面的錯誤:檢查G ++版本的Makefile

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

你的輸出到'g ++ -v'是什麼? –

+0

gcc版本4.9.2(海灣合作委員會) – Y91

+1

您的問題中有太多遺漏的細節來排除故障。 –

回答

1

你的路徑/opt/gcc/4.9.2/bin/g++表明,這不是唯一的包裝爲任何Linux發行版(或Unix)你正在使用的部分gcc的。相反,這是一個與你的發行版的gcc一起編譯和安裝的不同版本的gcc。 gcc在本地Linux發行版上的典型路徑是/usr/bin/g++

GCC是一個非常大的,複雜的,軟件包。預計它將被構建並配置爲本地Linux發行版的一部分。當然可以配置和構建不同版本的gcc,以補充Linux發行版附帶的版本。我以前做過,有幾個過程,但這是一個漫長而複雜的過程。這裏沒有一個小巧的配方,細節因主機Linux發行版而異。

這是一個全新的體驗,每一次。通常情況下,gcc的配置腳本會弄錯一些細節,並且必須修補gcc的配置腳本的某些部分,以便在主機發行版上正確構建gcc。

而且出問題時,你會得到這樣一個典型的結果 - 一個破碎的鏈接路徑。有時你最終會遇到頭文件或其他一些問題。

因此,爲了建立一個海灣合作委員會必須有廣泛的不只是開發經驗,同時也體驗到建設大型和複雜的自由軟件包。爲了構建GCC一個人也有廣泛的知識和得到用於構建GCC GNU工具鏈的理解,和其他成千上萬的免費軟件包:autoconfautomakelibtool,並根據該軟件包中的問題,或許其他幾個。

因此,您需要聯繫經驗豐富的系統管理員或開發人員,他們最初構建了gcc 4.9.2的自定義安裝並將其安裝在/ opt中,然後向他們顯示您遇到的錯誤,並讓他們他們弄清楚gcc如何配置錯誤,最終導致錯誤的連接。

1

一個簡單的解決方案是編譯和運行此程序:

#include <iostream> 

int main() 
{ 
    std::cout << __VERSION__ << std::endl; 
} 

這將打印用於編譯該程序的克版本++。 這裏__VERSION__是一個由g ++定義的宏。