2015-06-12 3 views
0

Я пытаюсь создать приложение из исходного кода. Я могу настроить его, используя 'cmake.'. Однако, когда я бегу «сделать» это дает мне это:Ошибка компоновщика при построении с исходного кода

Linking CXX executable ../../bin/lux64/Release/od_batch_launcher 
../../bin/lux64/Release/libBasic.so: undefined reference to `dlopen' 
../../bin/lux64/Release/libBasic.so: undefined reference to `dlclose' 
../../bin/lux64/Release/libBasic.so: undefined reference to `dlerror' 
../../bin/lux64/Release/libBasic.so: undefined reference to `dlsym' 
../../bin/lux64/Release/libBasic.so: undefined reference to `pthread_sigmask' 
collect2: error: ld returned 1 exit status 
make[2]: *** [bin/lux64/Release/od_batch_launcher] Error 1 
make[1]: *** [src/Basic/CMakeFiles/od_batch_launcher.dir/all] Error 2 
make: *** [all] Error 2 

Я понимаю, что его не может динамически связать с C++ библиотека. Я не совсем знаю, как внести необходимые изменения в cmake. Я запускаю версию gcc: 4.9.2 на Linux Mint 17. Я был бы признателен за любую помощь. Спасибо!

ответ

0

Попробуйте пройти -DCMAKE_EXE_LINKER_FLAGS=-ldl к исполнителю CMake. Для того, чтобы изменить CMake строить сценарии, добавить что-то вроде:

target_link_libraries(target_name dl) 

где target_name в основном имя исполняемого без каких-либо расширений (например .exe).

EDIT: На самом деле, я просто перечитываю вопрос, и я помещаю это в неправильное место. Вы действительно хотите:

target_link_libraries(Basic dl) 

Видимо, там были также PTHREAD-ошибки, связанные с, так что вы также должны добавить:

target_compile_options(Basic PUBLIC -pthread) 

Оба они входят в зависимости от того, файл содержит add_library(Basic) (обычно CMakeLists.txt) ,

EDIT 2: Вместо target_compile_options, попробуйте:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread") 
+0

Спасибо. Поэтому я должен добавить target_link_libraries (target_name dl) в CMakeLists.txt? и target_name будет od_batch_launcher? Извините, мне не очень нравится CMake. – raptor123

+0

@ user2984140 Я обновил свой ответ. – refi64

+0

Отлично! Некоторый прогресс! Ошибки, связанные с «dlopen» и т. Д .; пропали. Однако я не могу добавить target_compile_options. Я получаю это: CMake Error at src/Basic/CMakeLists.txt: 116 (target_compile_options): target_compile_options, вызванный с недопустимыми аргументами – raptor123

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

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