簡體   English   中英

為什么需要“-lpthread”?

[英]Why do you need '-lpthread'?

所以我的問題是:為什么在編譯命令的末尾需要“-lpthread”?

為什么這個命令有效:

gcc -o name name.c -lpthread

但這不會:

gcc -o name name.c

我在我的 c 代碼中使用 pthread.h 庫。
我已經在網上尋找了一些答案,但沒有真正找到可以理解的答案

pthread.h不是一個庫,它只是一個頭文件,它為您提供將用於多線程的函數的聲明(不是實際的函數體)。

在編譯時使用-libpthread-lpthread實際上將 GCC 庫pthread與您的代碼鏈接起來。 因此,編譯器標志-libLIBRARY_NAME-lLIBRARY_NAME是必不可少的。

如果您沒有在LIBRARY_NAME包含標志-l-lib ,您將無法使用外部庫。

在這種情況下,假設您正在使用函數pthread_createpthread_join ,那么您將收到一條錯誤消息:

undefined reference to `pthread_create'

undefined reference to `pthread_join'

-l選項告訴鏈接器在指定的外部庫中進行鏈接,在本例中為 pthread 庫。

包含 pthread.h 允許您在代碼中使用 pthread 庫中的函數。 但是,與在 studio.h 或 stdlib.h 等位置聲明的函數不同,默認情況下不會鏈接 pthread.h 中函數的實際代碼。

因此,如果您使用此庫中的函數而未能使用-lpthread ,則鏈接階段將失敗,因為它將無法在庫中找到諸如pthread_create等函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM