有没有人在 RHEL 上构建过omniORB?
Posted
技术标签:
【中文标题】有没有人在 RHEL 上构建过omniORB?【英文标题】:Has anyone ever built omniORB on RHEL? 【发布时间】:2012-08-27 13:34:10 【问题描述】:我正在尝试在 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')
所以,我尝试使用 Intel 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 位二进制文件。希望能深入了解这个问题。
【问题讨论】:
提到的SO是否在提到的目录中?在您的第一个变量列表中,您真的没有 PYTHON 定义的完整路径吗?如果您还没有发送电子邮件到omniorb 邮件列表,您可能还想发送电子邮件。 【参考方案1】:这是因为omniidl 是作为Python 扩展模块实现的。 您使用的 Python 可执行文件是 64 位可执行文件,因此它 无法加载 32 位库。
看看这个http://objectmix.com/object/196129-compiling-omniorb-32bits-libraries-64bits-machine-suse.html
【讨论】:
嘿萨蒂什,你指的是omnipython吗? 我说的是python,但也要确保你同时使用32位python和omnipython。你可以在 /usr/local/bin 目录下编译 32bit python 并根据路径改变 有没有办法检查python可执行文件是32位还是64位? python -c '导入平台;打印platform.architecture()' 我安装了 32 位 python 并传递了 32 位可执行文件的路径,但我仍然遇到同样的异常【参考方案2】:我终于找到了使用英特尔编译器在 Linux 上构建omniORB 的神奇组合。
你看到它抱怨找不到'__cxa_pure_virtual'的地方,这发生在gcc下,因为它找不到名为libstdc++的lib
所以,根据您使用的编译器制作CC="icc -lstdc++"
或CC="gcc -lstdc++"
。对 CXX 执行相同操作(如果使用 g++,请在 g++ 处指定)
对于Python,我使用了omnipython,它是python1.5,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 或您建议的任何前缀目录下的所有二进制文件和库。
【讨论】:
以上是关于有没有人在 RHEL 上构建过omniORB?的主要内容,如果未能解决你的问题,请参考以下文章
如何交叉编译omniORB 4(在x86_64 for ARM 和omniORB 4.1.6 上)
客户端使用java,服务端使用c++的corba编程环境搭建
如何在 Windows 10 上安装omniORB 和omniORBpy?