如何禁用 -Werror=date-time/macro "__DATE__" 可能会阻止可重现的构建

如何禁用 -Werror=date-time/macro "__DATE__" 可能会阻止可重现的构建

我正在尝试编译 Netis WF2190 适配器的驱动程序。是的,我刚刚从他们那里下载了最新版本。

我如何-Werror=date-time在构建中禁用它?我在构建脚本的任何地方都找不到它,所以我认为它一定是某种全局默认设置。显然,代码只是试图将构建日期/时间嵌入到输出中,因此禁用此警告应该没有问题。

以下是我收到的一些被视为错误的警告:

/home/andy/RTL8812AU_linux_v4.3.8_12175.20140902/driver/rtl8812AU_linux_v4.3.8_12175.20140902/core/rtw_debug.c:66:1: error: macro "__DATE__" might prevent reproducible builds [-Werror=date-time]
/home/andy/RTL8812AU_linux_v4.3.8_12175.20140902/driver/rtl8812AU_linux_v4.3.8_12175.20140902/core/rtw_debug.c:66:1: error: macro "__TIME__" might prevent reproducible builds [-Werror=date-time]
cc1: some warnings being treated as errors

答案1

我认为日期时间警告是 gcc 4.9 中的新内容 - 它可能是被隐式打开的-Wall(并且被隐式转变为错误-Werror)。

您可以尝试使用以下形式明确关闭它-Wno-

-Wno-error=date-time 

CFLAGS

答案2

我尝试多次将“Wno-error=date-time”行添加到 CFLAGS,但似乎没有作用。

对我来说,迄今为止最简单的解决方案是通过执行来找到生成“__DATE__”行的文件

grep -r "__DATE__"

它(针对我正在使用的源代码)给了我文件

acore/info.patch:+          "Compiled on " __DATE__ " for kernel %s"

我只是通过删除引号将其更改为没有变量的字符串,即

"Compiled on __DATE__ for kernel %s"

然后就可以继续编译了

编辑:如前所述,make clean在运行 configure 和 make 之前使用,或者更好的是,从 zip/tar 文件中提取新版本

答案3

最好从 rtw_debug.c 文件中删除第 66 行,以移除有问题的宏。

sed -i -e '66d' /home/andy/RTL8812AU_linux_v4.3.8_12175.20140902/driver/rtl8812AU_linux_v4.3.8_12175.20140902/core/rtw_debug.c

现在您可以继续构建:

cd /home/andy/RTL8812AU_linux_v4.3.8_12175.20140902/
sudo make clean
make
sudo make install

相关内容