2014-02-19 44 views
0

我想交叉编译telldus-core,以便能够在我的Synology NAS上使用Tellstick。我开始用这个命令运行的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!你为什么在sudo下运行cmake?!?!惊恐的事件。

此错误是因为您尚未将-lpthread(POSIX线程库)添加到您的链接行中。我不认为在cmake命令行的末尾添加-pthread会这样做。您需要修改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

,我会从删除须藤帖子。有人可能会看它... – 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}")