2009-08-13 3 views
8

Когда я пытаюсь построить этот проект с CMake и GCC на 64-битной Linux (Debian) машина, я получаю сообщение об ошибке от линкера:Строительный проект с участием CMake, как мне сделать это известно библиотек

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; делать; сделать install'-путь, который я мог бы установить переменную LIBS и выдал команду конфигурационный как это (я думаю):

export LIBS=-ldl && ./configure 

Но как же мне делать теперь?

UPDATE:

Таким образом, кажется, что (или по крайней мере) находится библиотека, но не содержит символы, о которых идет речь. Возможно, он пытается с 32-битной библиотекой в ​​/ lib?

Есть ли способ разобрать /lib64/libdl.so.2, чтобы убедиться, что у него есть ссылки dlopen и т. Д.?

Проблема теперь, кажется, направляет инструменты сборки в правильную версию библиотеки.

ответ

1

Возможно вам нужно добавить target_link_libraries() - см link text

+0

Это может работать, но это не «мой» проект, поэтому предпочтительно не хочу, чтобы редактировать файлы CMakeLists.txt. – dala

1

Добавьте это в CMakeLists.txt и он должен работать:

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

Это специфичное для Linux, а не лучшее решение, см. Ссылку на CMAKE_DL_LIBS выше. – ideasman42

25

Поскольку этот вопрос появляется на Google и оба ответа выиграли» t указывает на правильное решение здесь:

В вашем CMakeLists.txt добавьте ${CMAKE_DL_LIBS}, чтобы связать с idl. Это должно выглядеть примерно так:

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

Это более совместимый anwser, должен быть принят. –

+1

Я хочу добавить, что мне пришлось переместить $ {CMAKE_DL_LIBS} в последнюю позицию в списке. В противном случае это не сработало для меня – Anonymous

 Смежные вопросы

  • Нет связанных вопросов^_^