如何在 FreeBSD 机器上使用 clang(而不是 gcc)构建 openssl?

如何在 FreeBSD 机器上使用 clang(而不是 gcc)构建 openssl?

我有一台 64 位 FreeBSD 构建机器。我需要在 python3 应用程序代码中添加 https 支持。为此,建议构建/编译带有 openssl 支持的 python。我的最终可执行文件中不需要任何 gcc 依赖项。

所以我使用 clang 来构建 python。但在此之前,在构建 openssl 时我无法这样做。

我什至使用了“set CC clang”。但 openssl 仍然使用 gcc 作为 c 编译器。因此,在最终的动态可执行文件上运行“ldd”时,它会显示 libc 依赖性。

该链接没有提及任何有关 FreeBSD 和 clang 的内容。 (https://wiki.openssl.org/index.php/Compilation_and_Installation

请建议一些替代方案?

\bin\sh[编辑] 这些是我在shell上执行的命令

set CC clang

./config -fPIC

在输出中,我注意到以下行表明正在使用 gcc:

BN_ASM =x86_64-gcc.o

答案1

您似乎遇到了很多问题,总结如下。你几乎可以确定应该使用 @mjturner 指出的 python 端口,它将使用本机 FreeBSD OpenSSL。

  • csh语法中将两个名为和set CC clang的变量设置为空字符串,您想要,但即使这样也行不通(请参阅下一点)CCclangset CC=clang
  • 简单地在 shell 中设置一个变量csh不会影响您真正想要使用的任何其他内容setenv CC clang(请注意,这个变量不使用=)。config是一个sh脚本,因此必须导出该变量才能看到。
  • libc不是的依赖项gcc,几乎所有动态链接的内容都将链接到 libc(在 FreeBSD 上,这不是 GNU glibc)。另一种方法是链接静态地如果可能的话,通过将所需的代码嵌入到最终的二进制文件中来消除动态依赖性。 (当你使用时,gcc可能会libgcc依赖于某些平台,并用于异常处理。这是很难避免的。)我预计你在静态链接 python 时会遇到麻烦。

如果您出于某种目的而使用 clang 构建 OpenSSL 和 python,例如分发二进制文件(假设您已仔细阅读相关许可协议),或者对特定软件版本有要求,则可以通过正确设置CC.我注意到虽然OpenSSL 端口不这样做,它选择修补脚本gcc中的命令Configure并使用FREEBSDCC环境变量。

其他建议:

相关内容