[英]Why Do I need to compile C file referencing #include <semaphore.h> with -lpthread in Ubuntu 20.04, but not on Ubuntu 22.04?
[英]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_create
和pthread_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.