我有一台 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
的变量设置为空字符串,您想要,但即使这样也行不通(请参阅下一点)CC
clang
set 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
环境变量。
其他建议:
- 有关使用 clang 的信息,请参阅 OpenSSL wiki:https://wiki.openssl.org/index.php/Compilation_and_Installation#Modifying_Build_Settings
clang
是实际上涵盖了,但不是 FreeBSD,因为所有 BSD 在那里都被认为是等效的。 - 确保
make test
在构建 OpenSSL 后运行 - 确保使用相同的编译器编译所有内容,这意味着
python
所有内容都在lib-dynload