Ⅰ 向大蝦求助:mysql編譯時出現警告 gcc: -lpthread:未使用鏈接器輸入文件,因為鏈接尚未完成
需要提供完整的編譯錯誤信息。感覺像系統內衫畝沒罩薯有pthread的庫文件,或悶森可以看看系統是否沒有安裝線程包。
Ⅱ cmake編譯缺失pthread_create等thread庫解決方案
原文地址: https://justchen.com/2017/02/27/cmake%E7%BC%96%E8%AF%91%E7%BC%BA%E5%A4%B1pthread_create%E7%AD%89thread%E5%BA%93%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88.html
在使用cmake來編譯項目時,明明在CMAKE_CXX_FLAGS項中設置了-lpthread項目,在運行生成makefile時確實也看到了有-lpthread,但還是報錯:對『pthread_create』未定義的引用,簡直握搜槐是日了狗了…
後來google到了答段友案,如果是cmake項目需要修改Cmakefile.txt,增加以下內容
果然,加上後就解決漏旁問題了,makefile,只是把-lpthread移到了最後,如果只是動CMAKE_CXX_FLAGS項-lpthread是緊根著g++後,也許這樣不起作用….
Ⅲ linux下線程pthread編譯時為什麼要加lpthread
shibixiao | 六級
lpthread是表示要連接到pthread的庫是這讓脊里省略的lib,你應該可以找到共享庫libpthread.so的兆滑蔽
因為pthread編程用到的函數在pthread庫里族州面,就像你使用pow等數學計算函數,需要用到math.h
需要 -lm
Ⅳ gcc 編譯選項 -pthread -lpthread 異同
-pthread 比 -lpthread 多了一個宏定義 -D_REENTRANT
對於多線程程序來說這個宏非常重要,這個宏會讓libc和一些其他庫,自動選擇線程安全的函數實現(很多函數有線程安全和不安全的2種實現版本)
所以建議使用-pthread 或者加上 -D_REENTRANT.
Ⅳ linux下線程pthread編譯時為什麼要加lpthread
lpthread是表模顫示要連接到pthread的庫是這里省略信搭的lib,你應該可以找到共享旦坦敗庫libpthread.so的
Ⅵ gcc編譯線程程序,為什麼要加-lpthread,頭文件已經包含了<pthread.h>了啊
-lpthread是鏈接庫,
<pthread.h>只有申明,實現部分都在庫裡面。
創建線程時一般是把函數的指針做參數,所以要加一個取地址符號。
ret=pthread_create(&id,NULL,(void *)&thread,NULL);
另外,建議要檢查一下創建線程的返回值ret是否成功,防止影響後面的代碼。
(6)編譯lpthread擴展閱讀:
每個語言編譯器都是獨立程序,此程序可處理輸入的原始碼,並輸出組合語言碼。全部的語言編譯器都擁有共通的中介架構:一個前端解析符合此語言的原始碼,並產生一抽象語法樹,以及一翻譯此語法樹成為GCC的暫存器轉換語言〈RTL〉的後端。
編譯器最佳化與靜態程序碼解析技術(例如FORTIFY_SOURCE,一個試圖發現緩沖區溢位〈buffer overflow〉的編譯器)在此階段應用於程序碼上。最後,適用於此硬體架構的組合語言程序碼以Jack Davidson與Chris Fraser發明的演算法產出。
Ⅶ 使用(LPTHREAD_START_ROUTINE)強制轉換和線程函數聲明問題
這樣是編譯通過了,但是不妥當,可能會造成程序崩潰
void ThreadFunc(int a ,int b)的函數定義了兩個變數,在編譯成匯編代碼之後,API以為你這個函數規則是爛迅正常的ThreadProc規則進而調用函數時可能造成堆棧不平衡的錯誤,不建議使用。
至於為什麼可以,是因為C/C++的靈活性,其實強制CreateThread函數的LPTHREAD_START_ROUTINE這個參數只是個函數指針,換句話說,只要你內存里有這個函數的地址,就能夠編譯通過,這些內容如果你學習了匯編語言之後就能更深刻地仔歷虛理解了。
編譯通過並不代表運行正常,你的做法其實是很危險的,很有可能念燃把程序弄崩潰,這就是C/C++的靈活性帶來的副作用。
Ⅷ c編程中main函數中使用了庫文件中定義的函數,編譯時卻提示該函數未定義,這是什麼問題,坐等高手解答
原因:
頭文件 pthread.h 沒有包含態沖嘩到判慧源文件中
解決方法:
1)將 pthread.h 復制到源文件相同的文件夾中
2)修改為:帆行#include "pthread.h"
Ⅸ 在Linux下編譯C或C++多線程的時候,總是要用-lpthread,太麻煩。請看問題補充。
編譯參數,學學makefile怎麼寫吧
Ⅹ linux裡面線程編譯運行問題
#gcc a.c -o a #此句的-o a說明輸出目標文件為「a」;
#gcc -Wall-lpthread threadcreatetest.c #此句未註明輸出目標文件名,系統默認輸出為a.out,所以編譯之後執行./a.out文件。
如果上句也沒有指明「 -o a 」的話,輸出也是a.out,你可以試試