문제

I am trying to build omniORB libraries on RHEL 5.5.

I tried running configure with

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

I run into this problem where it complains about

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')

So, I tried to use the Intel C++ compiler instead, with

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

But, now it complains about ../../../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')

The OS is RHEL 5.5 with x86_64 architecture, and I am trying to build the 32 bit binaries. Would appreciate any insight into this problem.

도움이 되었습니까?

해결책 2

I finally found the magic combination to building omniORB on Linux using Intel compiler.

You see where it complains about '__cxa_pure_virtual' not found, this happens under gcc because it can't find a lib called libstdc++

So, make CC="icc -lstdc++" or CC="gcc -lstdc++" depending on which compiler you are using . Do the same for CXX (if using g++, specify it at g++)

And for Python, I used the omnipython which is a python1.5, PYTHON=bin/omnipython

which means it is looking relative to the omniORB root path.

You can see where it complains about 'wrong ELF class: ELFCLASS64', this is because you are trying to link a 32 bit binary using a 64 bit linker.

So, force your compiler and linker flags to 32.

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

Once done, run your configure

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

Run gmake followed by gmake install, and you will see all the binaries and libs under omniInst or whichever prefix directory you suggested.

다른 팁

That's because omniidl is implemented as a Python extension module. The Python executable you are using is a 64 bit executable, so it can't load a 32 bit library.

Check this out http://objectmix.com/object/196129-compiling-omniorb-32bits-libraries-64bits-machine-suse.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top