Проблема с проектом проекта CMake
У меня есть следующая проблема. На моем Ubuntu я пытаюсь построить проект и получить следующие ошибки компоновщика:
/usr/bin/ld:
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_thread.a(once.o): undefined reference to symbol '[email protected]@GLIBC_2.2.5'
/lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO
missing from command line collect2: error: ld returned 1 exit status
make[2]: *** [sunprint] Error 1 make[1]: ***
[CMakeFiles/sunprint.dir/all] Error 2 make: *** [all] Error 2
*** Failure: Exit code 2 ***
Я работаю под рабочим столом ubuntu 13, GCC 4.8, boost ver. составляет 1,54. В качестве IDE я работаю с
это KDevelop.
Я могу предоставить любую дополнительную информацию об этой проблеме, если это необходимо, но теперь я застрял
эта проблема связывания.
Любые идеи?
Thanx заранее.
Ответы
Ответ 1
add_definitions
добавляет только входные данные для препроцессора, который работает еще до того, как компилятор начинает свою деятельность и даже намного дальше от ссылки на исполняемый файл, предполагается, что выполняется шаг ld
.
То, что вы хотите, чтобы ld
разрешать зависимости времени между ссылками, - это команда CMake target_link_libraries
, которая для данной цели добавляет несколько libs для ссылки против после компиляции.
В этом случае соответствующий вызов может выглядеть так:
target_link_libraries(${PROJECT_NAME} [...] -lpthread [...]) #obviously without the '[...]' and the correct target name
Ответ 2
У меня была аналогичная проблема, но с mpich
. Оба:
target_link_libraries(${PROJECT_NAME} [...] -lmpich [...])
и
target_link_libraries(${PROJECT_NAME} [...] mpich [...])
работал правильно.