ฉันเจออย่างน้อย 3 วิธีในการทำสิ่งนี้และฉันสงสัยว่าวิธีใดเป็นสำนวน สิ่งนี้จำเป็นต้องดำเนินการในระดับสากลกับไลบรารีแบบคงที่ ฉันแปลกใจที่ตัวสร้าง Makefile ใน CMake ไม่เพิ่มสิ่งนี้ลงในไลบรารีแบบคงที่โดยอัตโนมัติ (เว้นแต่ฉันจะพลาดอะไรไป?)
target_compile_options(myLib PRIVATE -fPIC)
add_compile_options(-fPIC)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fpic")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpic")
ฉันเชื่อว่าอาจมีรูปแบบอื่น ๆ (โปรดแก้ไขคำถามของฉันหากคุณพบ)
หากคุณทราบคำตอบสำหรับคำถามนี้คุณทราบหรือไม่ว่ามีวิธีใดที่จะทำให้โครงการ CMake ของบุคคลที่สามถูกคอมไพล์ด้วยแฟล็กนี้โดยไม่ต้องแก้ไขไฟล์ CMakeLists.txt ฉันทำงานข้ามไลบรารีแบบคงที่โดยไม่มีแฟล็กนั้น ทำให้เกิดปัญหาเมื่อรวบรวมไลบรารีแบบคงที่ลงในไลบรารีไดนามิก
คุณได้รับ:
relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpic")
ได้ผลสำหรับฉัน