在lpthreads下揭开gcc的神秘面纱

时间:2010-05-18 21:44:22

标签: c++ c gcc

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

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)

据我所知,为了使这些清楚,main函数将number和sample.txt作为输入。(?)

感谢您的回答并让我明白。

3 个答案:

答案 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的库,因此您告诉它链接libpthreadlibrtlibc和{{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。