2014-02-19 41 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}")