2

我正在尝试在 RHEL 5.5 上构建omniORB 库。

我尝试运行配置

CC=gcc 和 CXX=g++ 和 PYTHON=bin/omnipython

我遇到了这个问题,它抱怨

gmake[3]: Entering directory `/home/local/NT/jayanthv/omniORB-4.1.4/src/lib/omniORB'
../../../bin/omniidl -bcxx -p../../../src/lib/omniORB -Wbdebug -Wba -p../../../src/lib/omniORB -Wbdebug -v -ComniORB4 ../../../idl/Naming.idl


omniidl: ERROR!

omniidl: Could not open IDL compiler module _omniidlmodule.so
omniidl: Please make sure it is in directory /home/local/NT/jayanthv/omniORB-4.1.4/lib
omniidl: (or set the PYTHONPATH environment variable)

omniidl: (The error was '/home/local/NT/jayanthv/omniORB-4.1.4/lib/_omniidlmodule.so: wrong ELF class: ELFCLASS64')

所以,我尝试使用英特尔 C++ 编译器,

export CXX=/opt/intel/Compiler/11.1/080/bin/ia32/icc
export LD_LIBRARY_PATH=/opt/intel/Compiler/11.1/080/lib/ia32
export PYTHON=/home/local/NT/jayanthv/omniORB-4.1.4/bin/omnipython

但是,现在它抱怨 ../../../bin/omniidl -bcxx -p../../../src/lib/omniORB -Wbdebug -Wba -p../../.. /src/lib/omniORB -Wbdebug -v -ComniORB4 ../../../idl/Naming.idl

omniidl: ERROR!

omniidl: Could not open IDL compiler module _omniidlmodule.so
omniidl: Please make sure it is in directory /home/local/NT/jayanthv/omniORB-4.1.4/lib
omniidl: (or set the PYTHONPATH environment variable)

omniidl: (The error was '/home/local/NT/jayanthv/omniORB-4.1.4/lib/_omniidlmodule.so: undefined symbol: __cxa_pure_virtual')

操作系统是具有 x86_64 架构的 RHEL 5.5,我正在尝试构建 32 位二进制文​​件。将不胜感激任何洞察这个问题。

4

2 回答 2

3

这是因为omniidl 是作为Python 扩展模块实现的。您使用的 Python 可执行文件是 64 位可执行文件,因此它无法加载 32 位库。

看看这个http://objectmix.com/object/196129-compiling-omniorb-32bits-libraries-64bits-machine-suse.html

于 2012-08-27T15:19:38.153 回答
0

我终于找到了使用英特尔编译器在 Linux 上构建omniORB 的神奇组合。

您会看到它抱怨找不到“__cxa_pure_virtual”的地方,这发生在 gcc 下,因为它找不到名为 libstdc++ 的库

因此,制作CC="icc -lstdc++"CC="gcc -lstdc++"取决于您使用的编译器。对 CXX 执行相同操作(如果使用 g++,请在 g++ 处指定)

而对于Python,我使用了python1.5的omnipython,PYTHON=bin/omnipython

这意味着它看起来相对于 omniORB 根路径。

您可以看到它在哪里抱怨“错误的 ELF 类:ELFCLASS64”,这是因为您尝试使用 64 位链接器链接 32 位二进制文​​件。

所以,强制你的编译器和链接器标志为 32。

CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32

完成后,运行您的配置

./configure --prefix=/opt/omniInst --build=i686-pc-linux-gnu

运行 gmake,然后运行 ​​gmake install,您将在 omniInst 或您建议的任何前缀目录下看到所有二进制文件和库。

于 2012-09-05T20:18:01.240 回答