你可以在64位机器上编译32位的Apache的DSO(Oracle HTTP服务器)?
-
22-08-2019 - |
题
我已经迁移Oracle数据库和Oracle HTTP服务器从一个32位的机安装到一个64位的机 - 两台机器运行Linux。 Oracle数据库是64位,但(Apache)的HTTP服务器是32位。
我使用一些非Oracle的数字存储示波器(mod_ntlm为一个),但每当我运行标准“使安装”类型的事我结束了一个64位的模块。
是否有编译一个64位机器上的32位的Apache模块的标准方式?
解决方案
作为替代安德鲁医学生的回答,请使用32位汇编“-m32
”以及有关PPC或SPARC或英特尔机器上的64位汇编“-m64
” - 因为你实际上并没有提及您正在使用的芯片架构和表示法适用于所有的这些。
我经常使用:
CC="gcc -m32" ./configure
,以确保32位汇编(或,更频繁,CC="gcc -m64"
以确保64位编译)。
问题: “是CC由make使用的环境变量”
答:是,尽管在这种情况下,它也由configure
,它是由生成autoconf
外壳脚本识别。这是我在命令行中使用 - - 我使用的符号,而在运行configure
命令设置CC环境。对方的回答建议使用:
./configure CC="gcc -m32"
我假定作品并实现几乎相同的效果;我没有尝试过,所以我不知道它的工作原理。
如果你运行./configure --help | less
,您将看到有关如何使用脚本的信息(通常只是标准信息)。并在最后,它会列出(一些)相关的环境变量,其中CC是一个。
设置C编译器为“gcc -m32”的优点是32位标志设置每次使用的编译时间 - 很少有余地就出问题。如果设置一个标志变量(CFLAGS,等),有机会的话,一些命令不会使用它,然后事情可能出错。
此外,要回的问题,当然make
使用可变(宏)称为CC。你可以设置make命令行:
make CC="gcc -m32"
这将覆盖在生成文件的任何设置。与此相反,使用环境变量,在生成文件的设置将覆盖在环境中的值,所以设置CC作为环境变量是以下有益的。虽然make -e
给出了生成文件的环境优先级,它通常是使用危险的选项。 - 它可以有意想不到的副作用
其他提示
./configure CFLAGS="-march=i686"
应该这样做
随着GCC的-m32标志,你可能需要包括-melf_i386标志LD正常的32位对象文件链接到32位库,如果你同时拥有32位和64位库。在64位Linux系统的标准LD将默认为64位库和当连接发生你得到一个兼容性错误。