簡體   English   中英

在lpthreads下揭開gcc的神秘面紗

[英]Demystifying gcc under lpthreads

在這些日子里,我正在玩線程庫並試圖實現一些功能。 其中一個教程說要運行程序使用:

gcc -lpthread -lrt -lc -lm project1.c scheduler.c -o out

首先,我需要深入了解gcc在每一行中所做的事情,

  • lpthread用於什么? lrt -lc -lm的貢獻是什么?

  • project1.c和scheduler.c是一起編譯的,所以我應該理解什么? 我檢查了
    代碼和其中任何一個都沒有包含在project1.c或scheduler.c中。

  • 作為輸出顯然它給出了“out”。

其次,作者聲明要運行你必須使用的程序

./out number filename (For example, ./out 2 sample.txt)

為了使這些清楚,我理解主函數獲取數字和sample.txt作為輸入。(?)

謝謝你的回答並讓我清楚。

-l參數表示 - 鏈接到特定庫。 有關更多信息,請參閱GCC手冊

因此-lpthread表示鏈接到libpthread.so(或pthread.a)同樣適用於-lm -lrt-lc

[lib] pthread [.so] - POSIX線程

[lib] m [.so] - 數學標准庫(sin,cos等)

[lib] rt [.so] - POSIX實時擴展

[lib] c [.so] - libc(標准C庫)

每個.c文件都編譯為.o目標文件(這些文件稱為編譯單元 ),並與上述庫鏈接在一起。

你應該如何傳遞命令行參數是正確的。

-lxxx表示鏈接名為libxxx的庫,因此您告訴它鏈接libpthreadlibrtlibclibm

您似乎不太可能需要指定鏈接libc - 這通常是默認情況下發生的。 libm是數學庫,因此對於大多數執行浮點運算的代碼都需要它。 libpthread包含pthreads函數(例如,pthread_create),因此創建/使用pthreads的任何代碼都需要鏈接到它。

project1.c和scheduler.c一起編譯意味着一個中的代碼可以調用另一個中的函數。

您對命令行參數的理解似乎是正確的。

作為輸出顯然它給出了“出去”

是的你用-o out指定了這個


gcc不僅將.c文件編譯為.o文件,還將編譯后的文件和使用-l指定的庫鏈接到二進制文件。


./out number filename (For example, ./out 2 sample.txt)

數字和文件名是程序的兩個參數,名稱為out。

暫無
暫無

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

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