2014-02-19 3 views
0

Я пытаюсь перекрестно скомпилировать telldus-core, чтобы иметь возможность использовать Tellstick на моем NAS Synology. Я начинаю, запустив CMake с этой командой:Как правильно управлять pthread?

[email protected]:/usr/local/src/telldus-core-2.1.1/build$ cmake -DCMAKE_C_COMPILER=/usr/bin/arm-linux-gnueabi-gcc-4.7 -DCMAKE_CXX_COMPILER=/usr/bin/arm-linux-gnueabi-g++-4.7 -DCMAKE_INSTALL_PREFIX=/opt -pthread .. 

Это приводит к следующему выходу:

-- Looking for include file pthread.h 
-- Looking for include file pthread.h - found 
-- Looking for pthread_create 
-- Looking for pthread_create - not found 
-- Looking for pthread_create in pthreads 
-- Looking for pthread_create in pthreads - not found 
-- Looking for pthread_create in pthread 
-- Looking for pthread_create in pthread - found 
-- Found Threads: TRUE 

Затем работает сделать результаты:

[ 98%] Building CXX object tdtool/CMakeFiles/tdtool.dir/main.cpp.o 
Linking CXX executable tdtool 
/usr/local/src/telldus-core-2.1.1/build/client/libtelldus-core.so: undefined reference to `pthread_create' 
/usr/local/src/telldus-core-2.1.1/build/client/libtelldus-core.so: undefined reference to `pthread_join' 
collect2: fel: ld returnerade avslutningsstatus 1 
make[2]: *** [tdtool/tdtool] Fel 1 
make[1]: *** [tdtool/CMakeFiles/tdtool.dir/all] Fel 2 
make: *** [all] Fel 2 
[email protected]:/usr/local/src/telldus-core-2.1.1/build$ 

Что я должен сделать, чтобы решить эту проблему ?

ответ

1

Gak! Почему вы используете cmake под sudo?!?! Ужас.

Эта ошибка возникает из-за того, что вы не добавили -lpthread (библиотеку потоков POSIX) в свою линию ссылок. Я не думаю, что добавление -pthread в конец командной строки cmake сделает это. Вам нужно будет изменить файл CMakeLists.txt и убедиться, что флаг присутствует как на линии компиляции, так и на линии ссылок.

Или я думаю, вы могли бы попытаться сделать это следующим образом:

cmake -DCMAKE_C_COMPILER='/usr/bin/arm-linux-gnueabi-gcc-4.7 -pthread' \ 
    -DCMAKE_CXX_COMPILER='/usr/bin/arm-linux-gnueabi-g++-4.7 -pthread' \ 
    -DCMAKE_INSTALL_PREFIX=/opt ... 
+0

Я удалю Sudo от после. Кто-то может посмотреть на это ... – Bengt62

+0

Ввод -pthread в качестве флагов компилятора для gcc и g ++ в CMakeLists.txt сделал трюк, спасибо! – Bengt62

+0

Вместо этого сделан ответ. – Anders

0

Успел сделать его компиляцию с следующими строки добавлены в /CMakeFiles.txt/tdtool/CMakeFiles.txt и /tdadmin/CMakeFiles.txt

SET(FORCE_COMPILE_FROM_TRUNK TRUE) 
SET(GCC_COVERAGE_COMPILE_FLAGS "-Wno-narrowing") 
SET(GCC_COVERAGE_LINK_FLAGS "-pthread -lpthread") 
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}") 
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}") 
Смежные вопросы