Я натрапив щонайменше на 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")
працювало для мене.