c-预处理器是否可以检查是否使用了链接器选项



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

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

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

我在Windows上使用MinGW。

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

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

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

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

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

最新更新