如何为OpenSSL提供自定义编译器/链接器标志?

时间:2011-10-19 20:20:51

标签: linux gcc build openssl

我正在尝试使用-Wa构建OpenSSL, - noexecstack,但在其config命令行中找不到任何地方来提供此标志。我试图设置CFLAGS,但它似乎忽略了它,只是使用它自己。

这是一个自动构建工作,可以处理OpenSSL源的干净副本,因此配置脚本的一次性破解实际上不是一个选项。

有没有办法将自定义标志传递给OpenSSL的构建过程?

3 个答案:

答案 0 :(得分:20)

稍后参加聚会,但这似乎是这样做的正确方法。

来自config脚本帮助:

$ ./config -h
Usage: config [options]
 -d Add a debug- prefix to machine choice.
 -t Test mode, do not run the Configure perl script.
 -h This help.

Any other text will be passed to the Configure perl script.
See INSTALL for instructions.

因此config脚本将Configure脚本的“意外”选项转发。好吧,让我们看看Configure脚本对此有何看法:

$ ./Configure --help
Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimental-<cipher> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no-]shared] [[no-]zlib|zlib-dynamic] [no-asm] [no-dso] [no-krb5] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--test-sanity] os/compiler[:flags]

查看该长行末尾的[:flags]部分?文件中还有一条评论:

# -<xxx> +<xxx> compiler options are passed through

这并不是那么明显,因为它不遵循众所周知的标准,但答案是:只需将选项附加到config命令行的末尾。

自从您发布问题以来已经过了很长时间,我必须添加:

  • 它可能不适用于您正在使用的OpenSSL版本(我的是OpenSSL 1.0);
  • 我觉得有必要发布这个答案,因为以前的答案都没有解决我的问题,我花了一点时间才弄明白这个问题。

答案 1 :(得分:13)

config脚本忽略CFLAGS,但忽略CC。因此,您可以指定编译器并同时为其指定标志:

export CC="gcc -Wall -DHELLO_WORLD"; ./config

或者,由于config会自动检测您的平台,然后使用预设的编译器设置运行Configure,您可以将编译器标志添加到您的平台配置中。例如,对于我的mac,我在第一次运行config时看到了这一行:

Operating system: i386-apple-darwinDarwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386
Configuring for darwin-i386-cc

因此,如果我打开Configure,我可以搜索darwin-i386-cc并将标记添加到预设中。

如果您没有使用预设配置,那么您只需将标志直接传递给命令行上的Configure,它就会使用它们。

答案 2 :(得分:4)

晚会,但另一种方法是对生成的makefile进行自动编辑。例如,要将-DPURIFY添加到标志中,我首先进行常规配置,然后:

perl -i~ -plwe 's!^(CFLAG=.*$)!$1 -DPURIFY!' Makefile

不是最优雅的解决方案,但它对我有用。