我试图使用-Wa,-noexecstack选项构建OpenSSL,但是在它的配置命令行中找不到提供此标志的任何地方。我尝试设置CFLAGS,但它似乎忽略了这一点并只使用自己的。
这是一个自动化构建,使用干净的OpenSSL源代码副本,所以对配置脚本进行一次性修改并不是真正的选择。
是否有办法将自定义标志传递给OpenSSL的构建过程?
我试图使用-Wa,-noexecstack选项构建OpenSSL,但是在它的配置命令行中找不到提供此标志的任何地方。我尝试设置CFLAGS,但它似乎忽略了这一点并只使用自己的。
这是一个自动化构建,使用干净的OpenSSL源代码副本,所以对配置脚本进行一次性修改并不是真正的选择。
是否有办法将自定义标志传递给OpenSSL的构建过程?
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
命令行的末尾即可。
由于您发布问题以来已经过了很长时间,我必须补充说明:
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
如果我打开“配置”,我可以搜索darwin-i386-cc
并将其添加到预设中。
如果您没有使用预设配置,则可以在命令行直接传递标志给Configure
,它会使用它们。
-DPURIFY
添加到标志中,首先进行常规配置,然后执行以下操作:perl -i~ -plwe 's!^(CFLAG=.*$)!$1 -DPURIFY!' Makefile
这不是最优雅的解决方案,但对我来说有效。
等等