深入討論講述Fedora gcc安裝動態連接
這里我們主要介紹Fedora gcc安裝,講解Linux上的各種Internet關鍵應用,首先讓大家了解下Fedora9中默認Fedora gcc安裝版本是4.3,(Ubuntu8.04還只是4.2.1)由于gcc本身的變化,在Fedora9中源碼編譯一些軟件的時候會出錯,比如eva。
我原來寫的程序在gcc 4.2.1中可以順利編譯,今天在F9中測試的時候就出錯了:test.cpp:38: error: ‘memcpy’ was not declared in this scope
Fedora gcc安裝的官方有針對這種情況的說明:http://gcc.gnu.org/gcc-4.3/porting_to.html
Fedora gcc安裝為了加快編譯的速度,減少了對頭文件的檢查,因此得手動包含所有相關的頭文件。這樣做可以確保程序員在寫代碼的時候意識到自己需要哪些頭文件,而不是交給編譯器去處理。不過同時也帶來了不少麻煩,許多以前寫的代碼都沒辦法在Fedora gcc 4.3中編譯通過。
我在Fedora gcc安裝(VM虛擬機中)中使用Fedora gcc 4.2.1編譯一個動態鏈接庫時完全正常,但在F9(AMD64 Dou)中使用Fedora gcc 4.3編譯就無法通過了提示:
/usr/bin/ld: test.o : relocation R_X86_64_32 against `a local symbol’ can not be used when making a shared object; recompile with -fPIC
test.o: could not read symbols: Bad value
不知道這是Fedora gcc 4.3的問題,還是雙核64系統的問題。只好再裝一個低版本的Fedora gcc安裝,下載了Fedora gcc 4.2.4的源碼包,沒想到編譯時又出錯了:
/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: 沒有那個文件或目錄
又google了半天終于找到了答案,缺少:glibc-devel-32bit,但是一直找不到和我系統glibc-devel(2.8)匹配的glibc-devel-32bit,只能找到一個2.5的rpm包,只好在安裝時使用了–nodeps選項。
把新編譯的Fedora gcc安裝好,并且重新設置PATH,再次編譯前面的程序,結果仍然一樣,看來確實是64位系統的問題了。
【編輯推薦】