在这些日子里我正在玩线程库并试图实现一些功能。 其中一个教程说运行程序使用:
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 number filename (For example, ./out 2 sample.txt)
据我所知,为了使这些清楚,main函数将number和sample.txt作为输入。(?)
感谢您的回答并让我明白。
答案 0 :(得分:8)
-l
参数表示 - 链接到特定库。有关详细信息,请参阅GCC manual
因此-lpthread
表示链接到libpthread.so(或pthread.a)
同样适用于-lm
-lrt
,-lc
[lib] pthread [.so] - POSIX threads
[lib] m [.so] - 数学标准库(sin,cos,e.t.c。)
[lib] rt [.so] - POSIX realtime extensions
[lib] c [.so] - libc(标准C库)
每个.c
文件都编译为.o
目标文件(这些文件称为编译单元),并与上述库链接在一起。
你应该如何传递命令行参数。
答案 1 :(得分:4)
-lxxx
表示链接名为libxxx
的库,因此您告诉它链接libpthread
,librt
,libc
和{{1 }}
你似乎不太可能真的需要指定链接libc - 这通常是默认情况下发生的。 libm是数学库,因此对于大多数执行浮点运算的代码都需要它。 libpthread包含pthreads函数(例如,pthread_create),因此创建/使用pthreads的任何代码都需要链接到它。
project1.c和scheduler.c一起编译意味着一个中的代码可以调用另一个中的函数。
您对命令行参数的理解似乎是正确的。
答案 2 :(得分:1)
作为输出显然它给出了“out”
是的,您使用-o out
gcc不仅将.c
文件编译为.o
个文件,还将编译后的文件和您用-l
指定的库链接到二进制文件。
./out number filename (For example, ./out 2 sample.txt)
数字和文件名是程序的两个参数,名称为out。