簡體   English   中英

創建共享對象時無法使用“獲取錯誤”; 使用-fPIC重新編譯-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM