나는 이것을하기위한 적어도 3 가지 방법을 발견했고 나는 어떤 것이 관용적 인 방법인지 궁금하다. 이것은 거의 모든 정적 라이브러리에 대해 거의 보편적으로 수행되어야합니다. CMake의 Makefile 생성기가이를 정적 라이브러리에 자동으로 추가하지 않는다는 사실에 놀랐습니다. (내가 놓친 게 아니라면?)
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")
다른 변형이있을 수도 있다고 생각합니다. (찾으면 내 질문을 수정하십시오)
이 질문에 대한 답을 아는 경우 CMakeLists.txt 파일을 수정하지 않고 타사 CMake 프로젝트가이 플래그로 컴파일되도록하는 방법이 있는지 알고 있습니까? 해당 플래그가 누락 된 정적 라이브러리를 실행했습니다. 정적 라이브러리를 동적 라이브러리로 컴파일 할 때 문제가 발생합니다.
당신은 얻을 :
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")
나를 위해 일했습니다.