Я нашел как минимум 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")
сработало для меня.