c++linuxrhelomniorb

Has anyone ever built omniORB on RHEL?


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.


Solution

  • 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.