繁体   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