0

我有一个计时器程序,它使用clock_gettime. 这需要-lpthread选项才能成功编译,否则会undefined reference to 'clock_gettime'出错。

到目前为止,我探索了我们可以生成预处理器警告消息#warning并检查包含是否存在#if __has_include("<pthread.h>")。但是检查这些并不能真正检查是否clock_gettime定义了函数。

只是好奇我是否可以制作一条自定义消息,以在编译时或预处理时警告那些在没有它的情况下编译以包含-lpthread选项的人。

我在 Windows 上使用 MinGW。

4

1 回答 1

2

我有一个计时器程序,它使用clock_gettime. 这需要-lpthread选项才能成功编译,否则它会获得未定义的clock_gettime错误引用。

clock_gettime要求-lrt,见man clock_gettime-lpthread恰好依赖于那个库。

-lpthread永远不要使用链接器选项,因为它是不够的。编译和链接多线程应用程序的正确方法是使用-pthread编译器和链接器选项。编译器选项定义所需的宏,链接器选项链接正确的库。

只是好奇我是否可以制作一条自定义消息,以在编译时或预处理时警告那些在没有它的情况下编译以包含-lpthread选项的人。

-lrt是一个链接器选项。当目标文件与链接分开编译时,链接器选项不是编译器命令行的一部分,因此在该阶段不可用。存在链接时代码生成,但是,编译器通常不会将链接器选项导出为宏,以供正在编译的代码进行检查。

于 2019-11-20T17:18:14.220 回答