【问题标题】:How can one provide custom compiler/linker flags for OpenSSL?如何为 OpenSSL 提供自定义编译器/链接器标志?
【发布时间】:2011-12-11 06:34:40
【问题描述】:

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

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

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

【问题讨论】:

  • 请注意,文档实际上建议您进行那些您想避免的编辑 - 请参阅 wiki.openssl.org/index.php/…,他们在其中谈到将 sed 作为构建的一部分运行。

标签: linux gcc build openssl


【解决方案1】:

晚会,但这似乎是正确的做法。

来自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);
  • 我觉得有必要发布这个答案,因为以前的答案都没有解决我的问题,我花了一点时间才弄清楚这个解决方案。

【讨论】:

  • 原来这没有用。大多数时候你需要设置 cflags;这只是附加它们。无助于摆脱已经存在的坏人。
  • 请注意,这不适用于所有类型的标志。例如,在 Windows 上,无法设置“/SUBSYSTEM:CONSOLE,x.xx”,您仍然必须退回到this answer
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 这似乎是删除或替换标志的唯一方法。
    【解决方案4】:
    1. CC=clang ./config [其他参数]
    2. CC=gcc ./confug [其他参数]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多