[英]Connecting 2 libs: can not be used when making a shared object; recompile with -fPIC
[英]Getting error “can not be used when making a shared object; recompile with -fPIC” although fpic is used
我目前正在cmake環境中構建共享庫(lib1.so)。 lib1.so依賴於外部靜態lib libLASlib.a(如有必要,我可以重新編譯)。 到目前為止,一切在Windows上都可以運行,但是切換到linux時又是另一回事了:
/usr/bin/ld: lib/LASlib/libLASlib.a(lasreader.cpp.o): relocation R_X86_64_PC32 against symbol `_ZN9LASreader35read_point_filtered_and_transformedEv' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
所以我嘗試用-fPIC->同樣的錯誤重新編譯libLASlib
由於我的環境,我無法驗證是否將fpic有效地添加到了gcc命令行中。
這是我試圖確認fPIC沒有問題的內容:
readelf --dynamic libLASlib.a | grep lasreader.cpp.o -A2
File: libLASlib.a(lasreader.cpp.o)
There is no dynamic section in this file.
為記錄未找到帶有動態節的單個cpp.o
我試着只是看看如果我將liblas從靜態更改為共享庫會給什么->沒有錯誤
可以嗎 非常感謝!
您需要使用-fPIC
編譯lasreader.cpp
。 像這樣:
g++ -c -fPIC -o lasreader.cpp.o lasreader.cpp
確實沒有應用fPIC
柯南似乎沒有轉發fPIC選項
我編輯了CMAKELIST並添加了
set_property(TARGET LASlib PROPERTY POSITION_INDEPENDENT_CODE ON)
最終通過了
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.