so 사용중 pthread Segmentation fault 문제

리눅스 c++

  • a.so 내에서 pthread 사용
  • a.so 를 사용하는 main 에서는 pthread 미사용
  • main 에서 so 를 dlopen 으로 동적 로딩
  • cmake > target_link_libraries(${PROJECT_NAME} pthread dl) 링크

위 상태에서 발생 할 수 있는 링크 오류

실제 main 의 ldd 를 확인 해보면 pthread 가 링크되지 않은걸 확인 할 수 있음

이는 실제 링크 시 필요한 지여부에 따라 링크여부를 결정하기 때문

https://man7.org/linux/man-pages/man1/ld.1.html

https://stackoverflow.com/questions/24532853/how-can-i-add-linker-flag-for-libraries-with-cmake

링크의 내용에 따르면 dlopen 시에는 as-needed (default) 가 아니므로..
링크하지 않음

강제로 링크하기 위해서는

cmake 옵션에

set(CMAKE_CXX_FLAGS -Wl,--no-as-needed)

를 추가 해준다

gcc 옵션으로는

$ g++ -o sample1 sample1.cpp -Wl,--no-as-needed -lpthread

같은 식으로 처리 가능


댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다