2015-01-19 2 views
5

Вот моя среда:Как позволить использовать CMake "-pthread" вместо -lpthread "

  • ОС: Ubuntu 14,10
  • НКУ: 4,9
  • CMake: 2,8, 3,1 (оба пытались)
  • проект: muduo

в последнее время я начал изучать программирование сети и скачать muduo для обучения Хотя у меня есть проблемы, чтобы построить источник, клюв. ause cmake будет жаловаться на «не могу найти -lpthreads».

Я провел некоторое исследование. В основном это связано с новой версией gcc под Ubuntu 14.10. Gcc-4.9 будет использовать «-pthread» для ссылки на библиотеку pthread, однако более старая версия gcc использует «-lpthreads». Кажется, что до сих пор использует CMake «-lpthreads», и я не знаю, как это исправить ...

Ниже журнал ошибок:

File /home/jack/workspace/github/build/release/CMakeFiles/CMakeTmp/CheckSymbolExists.c: 
/* */ 
#include <pthread.h> 

int main(int argc, char** argv) 
{ 
    (void)argv; 
#ifndef pthread_create 
    return ((int*)(&pthread_create))[argc]; 
#else 
    (void)argc; 
    return 0; 
#endif 
} 

Determining if the function pthread_create exists in the pthreads failed with the following output: 
Change Dir: /home/jack/workspace/github/build/release/CMakeFiles/CMakeTmp 

Run Build Command:"/usr/bin/make" "cmTryCompileExec2265723491/fast" 
/usr/bin/make -f CMakeFiles/cmTryCompileExec2265723491.dir/build.make CMakeFiles/cmTryCompileExec2265723491.dir/build 
make[1]: Entering directory '/home/jack/workspace/github/build/release/CMakeFiles/CMakeTmp' 
/usr/local/bin/cmake -E cmake_progress_report /home/jack/workspace/github/build/release/CMakeFiles/CMakeTmp/CMakeFiles 1 
Building C object CMakeFiles/cmTryCompileExec2265723491.dir/CheckFunctionExists.c.o 
/usr/bin/cc -DCHECK_FUNCTION_EXISTS=pthread_create -o CMakeFiles/cmTryCompileExec2265723491.dir/CheckFunctionExists.c.o -c /usr/local/share/cmake-3.1/Modules/CheckFunctionExists.c 
Linking C executable cmTryCompileExec2265723491 
/usr/local/bin/cmake -E cmake_link_script CMakeFiles/cmTryCompileExec2265723491.dir/link.txt --verbose=1 
/usr/bin/cc -DCHECK_FUNCTION_EXISTS=pthread_create CMakeFiles/cmTryCompileExec2265723491.dir/CheckFunctionExists.c.o -o cmTryCompileExec2265723491 -rdynamic -lpthreads 
/usr/bin/ld: cannot find -lpthreads 
collect2: error: ld returned 1 exit status 
CMakeFiles/cmTryCompileExec2265723491.dir/build.make:88: recipe for target 'cmTryCompileExec2265723491' failed 
make[1]: Leaving directory '/home/jack/workspace/github/build/release/CMakeFiles/CMakeTmp' 
Makefile:118: recipe for target 'cmTryCompileExec2265723491/fast' failed 
make[1]: *** [cmTryCompileExec2265723491] Error 1 
make: *** [cmTryCompileExec2265723491/fast] Error 2 

Кто-нибудь знает, как это исправить, и позвольте мне скомпилировать muduo на Ubuntu 14.10?

+2

Вы используете 'find_package (Threads REQUIRED)' в вашем 'CMakeLists.txt' или что? Вы должны показать свой файл. – stefan

+0

Проверьте здесь, если это поможет http://stackoverflow.com/questions/23250863/difference-between-pthread-and-lpthread-while-compiling – DumbCoder

+0

Я только что получил ответ от автора muduo. Это из-за отсутствия libboost-dev. Сообщение об ошибке вводит в заблуждение ... –

ответ

4

Установите компиляции или ссылку флаги цели:

set_target_properties(target1 PROPERTIES COMPILE_FLAGS -pthread LINK_FLAGS -pthread) 

Или установить глобальные переменные:

set(CMAKE_LINKER_FLAGS "-pthread" CACHE STRING "Linker Flags" FORCE) 
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_LINKER_FLAGS}" CACHE STRING "" FORCE) 
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS}" CACHE STRING "" FORCE) 
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS}" CACHE STRING "" FORCE) 
0

Я только что получил ответ от автора muduo. Это вызвано отсутствием libboost-dev. Сообщение об ошибке вводит в заблуждение.

После применить следующую команду:

sudo apt-get install g++ libboost-dev cmake make git 

Билд преуспеет.

+1

У меня установлены все эти пакеты, проблема не связана с установленными пакетами. – Avio

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