预处理程序是否可以检查是否使用了链接器选项?

时间:2019-11-20 16:52:06

标签: c gcc mingw c-preprocessor linker-flags

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

到目前为止,我已经探索过可以使用#warning生成预处理程序警告消息,并检查#if __has_include("<pthread.h>")是否包含了该包含内容。但是检查这些并不能真正检查是否定义了clock_gettime函数。

我只是想知道我是否可以发出自定义消息,以警告在编译时或预处理时没有使用-lpthread选项进行编译的人。

我正在Windows上使用MinGW。

1 个答案:

答案 0 :(得分:2)

  

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

clock_gettime要求-lrt,请参阅man clock_gettime-lpthread恰好依赖于该库。

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

  

我只是想知道我是否可以发出自定义消息,以在编译时或预处理时警告未进行编译以包含-lpthread选项的人。

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

相关问题