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

时间:2014-01-23 20:04:19

标签: c gcc debian

我正在尝试构建一个非常简单的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 个答案:

答案 0 :(得分:2)

有几种可能性,第三种似乎最有可能,但我已经提到过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_的东西的环境,所以你需要设置{{1}无论是什么构建包。

  3. CFLAGS不足以消除加固错误。让我们来看看lintian错误:http://lintian.debian.org/tags/hardening-no-fortify-functions.html并注意它说'确定性:疯狂猜测'。这并不能激发人们对它是正确的信心。但是,我怀疑实际问题是:你没有带来CFLAGS。尝试:

    LDFLAGS

    $ dpkg-buildflags --get LDFLAGS

  4. 您需要链接器上的那些。

    这种方法似乎有效(即至少编译):

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