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

发布于 2024-12-10 17:37:26 字数 195 浏览 0 评论 0原文

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

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

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

I'm trying to build OpenSSL with -Wa,--noexecstack, but can't find anywhere in its config command-line to provide this flag. I've tried to set CFLAGS, but it appears to ignore that and just use its own.

This is an automated build working off a clean copy of the OpenSSL source, so a one-time hack of the config script isn't really an option.

Is there a way to pass custom flags to OpenSSL's build process?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

记忆里有你的影子 2024-12-17 17:37:26

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

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

Later to the party, but this seems to be the correct way of doing this.

From the config script help:

$ ./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.

So the config script forwards "unexpected" options to the Configure script. Well, lets see what the Configure script has to say about that:

$ ./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]

See the [:flags] part at the end of that long line? There is also a comment inside the file:

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

It's not that obvious since it does not follow well known standards but the answer is: just append the options to the end of the config command line.

As a long time has passed since you posted the question, I must add:

  • it may not work for the version of OpenSSL you are working with (mine is OpenSSL 1.0);
  • I felt compelled to post this answer since none of the previous answers solved my problem and it took me a little while to figure out that solution.
相守太难 2024-12-17 17:37:26

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 code> 并将标志添加到预设中。

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

The config script ignores CFLAGS, but not CC. So you can specify your compiler and give it the flags at the same time:

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

Alternatively, since config auto detects your platform and then runs Configure with preset compiler settings, you can add the compiler flags to your platform configuration. E.g., for my mac, I see this line when I first run 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

So if I open Configure, I can search for darwin-i386-cc and add the flags to the presets.

If you're not using a preset configuration, then you'd just pass the flags directly to Configure on the command line and it'll use them.

任谁 2024-12-17 17:37:26

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

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

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

Late to the party, but another way of doing this is to make an automated edit to the generated makefile. E.g., to add -DPURIFY to the flags, I first do the regular configure, then:

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

Not the most elegant solution, but it works for me.

一场春暖 2024-12-17 17:37:26
  1. CC=clang ./config [其他参数]
  2. CC=gcc ./confug [其他参数]

  1. CC=clang ./config [other args]
  2. CC=gcc ./confug [other args]

etc

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文