關於linux中so鏈接a

這段由於工作需要,做成鏈接庫文件給別人調用,但是隻想提供一個so文件,於是實現在so文件中鏈接.a文件,寫了一個測試程序,編譯腳本如下:


g++ -fPIC hello.cpp -c -o hello.o
ar rcs libhello.a hello.o
g++ -fPIC -shared -o libhello_s.so hello_s.cpp -L. -lhello
g++ -o main -g main.cpp -L. -lhello_s


剛剛開始在編譯靜態庫的時候,沒有加入-fPIC參數,編譯libhello_s.so文件時,出現如下錯誤:

/usr/bin/ld: ./libhello.a(hello.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
./libhello.a: could not read symbols: Bad value


百度查找資料-fPIC這個參數,是代碼段重新定位,猜想鏈接庫的地址只能夠是相對地址,so鏈接.a文件也使用的相對地址,所以.a需要加上-fPIC編譯

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章