在lpthreads下揭开gcc的神秘面纱

ber*_*kay 3 c c++ gcc

在这些日子里,我正在玩线程库并试图实现一些功能.其中一个教程说要运行程序使用:

gcc -lpthread -lrt -lc -lm project1.c scheduler.c -o out
Run Code Online (Sandbox Code Playgroud)

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

  • lpthread用于什么?lrt -lc -lm的贡献是什么?

  • project1.c和scheduler.c是一起编译的,所以我应该理解什么?我检查
    了代码,其中任何一个都没有包含在project1.c或scheduler.c中.

  • 作为输出显然它给出了"out".

其次,作者声明要运行你必须使用的程序

./out number filename (For example, ./out 2 sample.txt)
Run Code Online (Sandbox Code Playgroud)

为了使这些清楚,我理解主函数获取数字和sample.txt作为输入.(?)

谢谢你的回答并让我清楚.

EFr*_*aim 9

-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目标文件(这些文件称为编译单元),并与上述库链接在一起.

你应该如何传递命令行参数是正确的.