리눅스 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
같은 식으로 처리 가능
댓글 남기기