gpt4 book ai didi

c - 使用 dpkg-buildflags 构建一个简单的程序

转载 作者:太空宇宙 更新时间:2023-11-04 02:51:54 29 4
gpt4 key购买 nike

我正在尝试构建一个非常简单的 C 程序以包含到 .deb 包中。该项目的大部分是用 Python 编写的。当此程序包含在 .deb 包中时,lintian 会给我 hardening-no-fortify-functions 警告。

进一步阅读,似乎 Debian 希望您在构建 C 程序时包含某些标志,并且可以使用 dpkg-buildflags --get CFLAGS 检索这些标志。

我最初的构建标志是这样的:

gcc -Wall -pedantic -o somefile somefile.c

现在,我正在构建

CFLAGS=`dpkg-buildflags --get CFLAGS`
gcc $CFLAGS -o somefile somefile.c

但是,我继续收到 hardening-no-fortify-functions 警告。我在这里做错了什么?现在这是误报吗?我可以只添加一个覆盖而不管它吗?

最佳答案

有几种可能性,其中第三种可能性最大,但我已经提到了 1 和 2,以防它们也给您带来问题:

  1. dpkg-buildflags --get CFLAGS 返回了错误的内容。在我的系统上它返回:

    -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security

    如果你只是从命令行执行它,你会得到什么?

  2. CFLAGS 的值没有传递给 gcc。我假设您在这里使用的是 Makefile;这两个陈述实际上是相邻的吗?如果是这样,你不想要 CFLAGS = (带空格)吗?或者您是否在命令行设置了 CFLAGS,在这种情况下,您应该知道 debian 构建工具会去除环境中大多数不启动 DEB_ 的东西,因此您将需要在构建包的任何内容中设置 CFLAGS

  3. CFLAGS 不足以消除强化错误。让我们看看 lintian 错误:http://lintian.debian.org/tags/hardening-no-fortify-functions.html并注意上面写着“确定性:疯狂猜测”。这并不能激发人们相信它是正确的。但是,我怀疑实际问题是这样的:您没有引入 LDFLAGS。尝试:

    $ dpkg-buildflags --get LDFLAGS

    -Wl,-Bsymbolic-functions -Wl,-z,relro

您需要在链接器行上使用它们。

这种方法似乎可行(即至少编译):

gcc `dpkg-buildflags --get CFLAGS` `dpkg-buildflags --get LDFLAGS` main.c -o main

关于c - 使用 dpkg-buildflags 构建一个简单的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21318235/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com