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

时间:2009-03-28 23:10:57

标签: 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模块的标准方法?

3 个答案:

答案 0 :(得分:5)

作为Andrew Medico的答案的替代方案,使用'-m32'进行32位编译,使用'-m64'进行PPC或SPARC或Intel机器上的64位编译 - 因为你没有实际上提到了你正在使用的芯片架构,并且符号适用于所有这些。

我经常使用:

CC="gcc -m32" ./configure

确保32位编译(或更常见的是CC="gcc -m64"以确保64位编译)。


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

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

./configure --help | less

我认为它起作用并取得了同样的效果;我没试过,所以我不知道它有效。

如果您运行make,您将看到有关如何使用该脚本的信息(通常只是标准信息)。最后,它将列出(一些)相关的环境变量,其中CC是一个。

将C编译器设置为“gcc -m32”的优点是每次使用编译器时都会设置32位标志 - 它几乎没有出错的余地。如果你设置了一个标志变量(CFLAGS等),有些命令可能不会使用它,然后事情就会出错。

另外,回到问题,make CC="gcc -m32" 肯定使用一个名为CC的变量(宏)。您可以在make命令行中设置它:

make -e

覆盖makefile中的任何设置。相反,使用环境变量时,makefile中的设置会覆盖环境中的值,因此将CC设置为环境变量的帮助较小。虽然{{1}}赋予环境优先于makefile的权限,但它通常是一个危险的选择 - 它可能会产生意想不到的副作用。

答案 1 :(得分:3)

./configure CFLAGS="-march=i686" 

应该这样做

答案 2 :(得分:2)

除了gcc中的-m32标志外,如果你同时拥有32位和64位库,你可能需要为ld包含-melf_i386标志以正确地将32位目标文件链接到32位库。 64位linux盒子上的标准ld将默认为64位库,并且在链接发生时会出现兼容性错误。