4
我有一個問題,CMake can't detect pthread。作爲一種變通我想:如何在使用CMake的鏈接命令行末尾添加一個標誌?
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lpthread")
然而,這種插入-lpthread
在錯誤的地方:
/usr/bin/c++ -std=c++11 -D_GNU_SOURCE -Wall [manyflags ...] -lpthread \
CMakeFiles/connectivity_tool.dir/connectivity_tool/conn_tool.cpp.o \
-o connectivity_tool -rdynamic -lboost_system [many libraries...]
這導致:
/usr/bin/ld: /tmp/ccNvRifh.ltrans3.ltrans.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
當然,-lpthread
應在第三行結束時,不是第一行的結尾。
如何讓CMake在該行的末尾添加-lpthread
,或者甚至可以用某種奇怪的方式修改生成的Makefiles以使其發揮作用?
(如果答案涉及到實際檢測並行線程正確,然後回答鏈接的問題。)
在你的set()後面是否還有'include','set(CMAKE_EXE_LINKER_FLAGS ...)'或者package引用?還要注意:對於當前的標準,你應該只指定全局的'-pthread'選項。 –
@πάνταῥεῖ:有,我把它放在最頂端。有趣的是,使用'-pthread'使它工作! – Claudiu
編譯和鏈接階段都需要這個選項('-pthread')。很高興它似乎解決你的問題(恕我直言,鏈接器自動化)。 CMake有時很難以正確的順序得到東西:P。最近,我一直在使用make和[mighty mighty製作模板評估函數](https://www.gnu.org/software/make/manual/html_node/Eval-Function.html)來重新管理我的構建系統。 CMake提供了或多或少的相同內容,但我一直在觸及不可解決的情況(如將CMake生成的庫列表嵌入適當的'--start-group' /'--end-group'對) –