Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何为OpenSSL提供自定义编译器/链接器标志?_Linux_Gcc_Build_Openssl - Fatal编程技术网

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

Linux 如何为OpenSSL提供自定义编译器/链接器标志?,linux,gcc,build,openssl,Linux,Gcc,Build,Openssl,我试图用-Wa、-noexecstack构建OpenSSL,但在其config命令行中找不到提供此标志的任何地方。我试图设置CFLAGS,但它似乎忽略了这一点,只使用了自己的CFLAGS 这是一个基于OpenSSL源代码的干净副本的自动构建,因此一次性破解配置脚本并不是一个真正的选项 有没有办法将自定义标志传递给OpenSSL的构建过程?脚本忽略CFLAGS,而不是CC。因此,您可以指定编译器并同时为其指定标志: export CC="gcc -Wall -DHELLO_WORLD"; ./co

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

这是一个基于OpenSSL源代码的干净副本的自动构建,因此一次性破解配置脚本并不是一个真正的选项


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

脚本忽略
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
,它就会使用它们。

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

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

这不是最优雅的解决方案,但对我来说很有效。

晚会稍后,但这似乎是正确的方法

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]
这并不明显,因为它不遵循众所周知的标准,但答案是:只需将选项附加到
config
命令行的末尾即可

自从你发布这个问题以来,已经过了很长时间,我必须补充:

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

这似乎是移除或替换标志的唯一方法。结果证明这没有用。大多数情况下,您需要设置cflags;这只是它们的附属品。这无助于清除已经存在的坏标记。请注意,这并不适用于所有类型的标记。例如,在Windows上,无法设置“/SUBSYSTEM:CONSOLE,x.xx”,您仍然需要返回到。请注意,文档实际上建议您进行您希望避免的编辑-请参阅,其中他们谈到在构建过程中运行sed。
# -<xxx> +<xxx> compiler options are passed through