2
我想用gfortran創建一個共享庫,並將其與libgfortran的靜態版本鏈接以實現可移植性。不幸的是,我沒有設法適當地鏈接不同的對象。我已經找到了一些解決類似問題的帖子,但我無法弄清楚如何解決這個問題。與靜態庫鏈接的共享庫:重定位錯誤
我的源文件全部使用-fPIC
標誌進行編譯。當我嘗試的對象與標誌-shared
和-static-libgfortran
鏈接,我得到了以下錯誤消息:
gfortran -shared -static-libgfortran file1.o file2.o file3.o -o "mynewlib.so"
/usr/bin/ld: ../lib64/libgfortran.a(error.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
../lib64/libgfortran.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
我使用gfortran 4.6.3,我從頭開始編寫我的服務器上。安裝順利進行,我沒有更改標準配置。我在舊帖子中發現編譯器應該配置爲--with-pic
,但在GCC manual中未提及此標誌。
問題來自編譯器還是來自我試圖鏈接不同對象的方式?任何想法如何我可以解決這個問題?
非常感謝您的幫助!
這是我的猜測,但是如何獲得用'-fPIC'編譯的'libgfortran'版本? – remek
你可能會考慮從它的源代碼編譯GCC,並手動調整一些標誌(可能用'../gcc-4.7/configure CFLAGS =' - fPIC'....),但我真的相信這是不值得的。 –
有關我的問題的更多詳細信息:我在安裝了非常舊的GCC版本的服務器上共享此庫,該服務器太舊無法編譯我的代碼。我剛剛安裝了一個更新版本的GCC來解決這個問題,但是我的同事也必須能夠訪問共享版本的'libgfortran'。我認爲擁有一個獨立的共享庫會更容易。你不想那樣做?有什麼選擇?與他們分享'libgfortran'? – remek