最近做專案的過程中間需要在生成.la動態庫的同時連結libnet.a靜態程式庫,本來正確的寫法應該是

libcharon_la_LIBADD += /usr/lib/libnet.a


但是編譯的時候報錯:

/usr/bin/ld: /usr/lib/libnet.a(libnet_build_ip.o): relocation R_X86_64_32 against `a local symbol' can not

be used when making a shared object; recompile with -fPIC

 

這應該是和64位系統衝突的關係。後來試了一下在Makefile中加上-fPIC編譯選項,仍然錯誤。在這篇文章中應該有解決辦法,

不過沒細看,有時間嘗試嘗試,貌似要把你需要的.a靜態程式庫建立一個子目錄,並寫一個makefile.am檔,裡面指定類似以下的內容:

 

noinst_LIBRARIES = libjupcommon.a

libjupcommon_a_SOURCES = jupcommon.h print.c

 

libjupcommon_a_CFLAGS = -fPIC

 

官方比較建議的另一種做法是把.a靜態程式庫換成.la動態庫進行連結,這樣不會出問題。

 

我現在的做法是需要連結.a靜態程式庫的那塊代碼分出來,寫成可執行檔的Makefile.am,這樣用charon_LDADD = /usr/lib/libnet.a就可以了,不會和靜態程式庫的連結產生衝突。





本站文章除注明轉載外,均為本站原創或編譯歡迎任何形式的轉載,但請務必注明出處,尊重他人勞動,同學習共成長。轉載請注明:文章轉載自:羅梭實驗室 [HTTP://www.rosoo.net/a/201307/16680.html]
本文出處:CSDN博客 作者:vividonly 原文
創作者介紹

資訊園

shadow 發表在 痞客邦 PIXNET 留言(0) 人氣()