linux - 你能在 64 位机器上编译 32 位 Apache DSOs (Oracle HTTP Server) 吗?

标签 linux oracle apache 32bit-64bit

我已经将 Oracle 数据库和 Oracle HTTP 服务器安装从 32 位机器迁移到 64 位机器——两台机器都运行 Linux。 Oracle 数据库是 64 位的,但 (Apache) HTTP 服务器是 32 位的。

我使用了一些非 Oracle DSO(其中之一是 mod_ntlm),但每当我运行标准的“make install”类型的东西时,我最终都会得到一个 64 位模块。

是否有在 64 位机器上编译 32 位 Apache 模块的标准方法?

最佳答案

作为 Andrew Medico 答案的替代方案,使用“-m32”进行 32 位编译,使用“-m64”进行 PPC 或 SPARC 上的 64 位编译或英特尔机器 - 因为您实际上没有提到您使用的是哪种芯片架构,而且该符号适用于所有这些。

我经常使用:

CC="gcc -m32" ./configure

确保 32 位编译(或者更频繁地,CC="gcc -m64" 确保 64 位编译)。


问题:“CC是make使用的环境变量吗?”

回答:是的,虽然在这种情况下,它也被 configure 识别,它是由 autoconf 生成的 shell 脚本。我使用的符号 - 这是我在命令行中使用的符号 - 在运行 configure 命令时在环境中设置 CC。另一个答案建议使用:

./configure CC="gcc -m32"

我假设它可以工作并达到相同的效果;我没有尝试过,所以我不知道它是否有效。

如果你运行 ./configure --help | less,您将看到有关如何使用脚本的信息(通常只是标准信息)。最后,它会列出(一些)相关的环境变量,CC 就是其中之一。

将 C 编译器设置为“gcc -m32”的优点是每次使用编译器时都会设置 32 位标志 - 它出错的空间很小。如果您设置标志变量(CFLAGS 等),某些命令可能不会使用它,然后事情就会出错。

另外,回到问题,make肯定用到了一个叫CC的变量(宏)。您可以在 make 命令行上设置它:

make CC="gcc -m32"

这会覆盖 makefile 中的任何设置。相比之下,使用环境变量时,makefile 中的设置会覆盖环境中的值,因此将 CC 设置为环境变量的帮助不大。虽然 make -e 使环境优先于 makefile,但使用它通常是一个危险的选项 - 它可能会产生意想不到的副作用。

关于linux - 你能在 64 位机器上编译 32 位 Apache DSOs (Oracle HTTP Server) 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/693733/

相关文章:

java - 将代码从 Oracle Forms 6i 转换为 10g

mysql - iRedMail 缺少 apache2-mod-auth-mysql

MySQL 未在 Linux 机器上运行

python - 如何确定python正在执行哪个脚本?

Oracle AQ 相同的消息被传递两次

sql - Oracle 按分钟分组

apache - 如何重构我的 .htaccess 以获取我所有页面的语义 url

php - MySQL、PHP、Apache 应用程序备份

linux - 如何将 Node js web 应用程序设置为服务?

linux - 为什么重定向 + 管道 ( 2>&1 |) 合并两个流而不是将 stderr 移动到 stdout?