2009-08-13 7 views
8

의 그것을 인식해야합니까 (데비안) 기계, 나는 링커에서 오류가 발생합니다 :건물 프로젝트는 어떻게 라이브러리

Linking C executable ../../../../cpsadamsx 
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlopen' 
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlclose' 
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlerror' 
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlsym' 
collect2: ld returned 1 exit status 
make[2]: *** [cpsadamsx] Error 1 
make[1]: *** [sundials/examples/cpodes/serial/CMakeFiles/cpsadamsx.dir/all] Error 2 
make[1]: *** Waiting for unfinished jobs.... 

분명히 dlopen, dlclose, dlerror 및 dlsym은 libdl.so에 대한 참조입니다. 나는 /lib64/libdl.so.2에 그 라이브러리를 가지고 있는데 왜 발견되지 않습니까?

정상적인 './configure; 하다;

export LIBS=-ldl && ./configure 

을하지만 지금은 어떻게해야합니까 : install' 경로를 만들 내가 LIBS 변수를 설정하고이 같은 구성 명령을 실행 한 수 (나는 생각한다)?

는 UPDATE :

그래서 (또는 적어도) 라이브러리를 찾을 것 같다,하지만 문제의 문자가 포함되어 있지 않습니다. 아마도/lib에있는 32 비트 라이브러리로 시도 할 것입니까?

/lib64/libdl.so.2를 역 어셈블하여 dlopen 등의 참조가 없는지 확인하십시오.

이제 문제는 빌드 도구를 올바른 버전의 라이브러리로 안내하는 것 같습니다. 이 질문으로

SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ldl") 

답변

1

아마 당신은 target_link_libraries()를 추가해야 올바른 해결책을 가리키고 있습니다 :

CMakeLists.txt에 id30과 연결되는 ${CMAKE_DL_LIBS}을 추가하십시오. 그래서 바람직 나는 CMakeLists.txt 파일을 편집하지 않으려는, 작동 할 수 있습니다

target_link_libraries(ExpandableTest 
    ${CMAKE_DL_LIBS} 
    Expandable 
    ExpandableTestLibrary 
) 
+0

을하지만,하지 "내"프로젝트 : 그것은이 유사합니다. – dala

1

가 CMakeLists.txt이 추가를 참조하고 그것을 작동합니다 -

+2

위의 CMAKE_DL_LIBS에 대한 참고 자료를 참조하십시오. – ideasman42

25

구글에 게재되며, 모두 대답은 '원 : link text

+0

이것은 더 호환되는 anwser이며 허용 된 것이어야합니다. –

+1

$ {CMAKE_DL_LIBS}을 (를) 목록의 마지막 위치로 이동해야한다는 것을 추가하고 싶습니다. 그렇지 않으면 그것은 나를 위해 작동하지 않았다. – Anonymous