带有 omniORB 库的 PHP 扩展 CORBA 客户端给出运行时错误 "undefined symbol "

标签 php c++ corba omniorb

我们正在尝试用 C++ 创建一个 PHP 扩展,它将作为 CORBA 客户端运行。

服务器端是用 Java 编写的。我们的运行环境是CentOS 6.6。

我们已经使用 omniORB 编译了 IDL 并为客户端创建了 C++ 骨架代码。我们的第一步是创建一个可以正常工作的客户端程序。然后,我们将该功能包含在一个 PHP 扩展中,该扩展可以无误地编译和链接。

然而,当我们的扩展库在 PHP 中安装和测试时,我们收到以下错误:

PHP 警告:PHP 启动:无法加载动态库 '/usr/lib64/php/modules/php_midas.so' -/usr/lib64/php/modules/php_midas.so: undefined symbol :_ZTv0ortableServer11ServantBase9_downcastEv in第 0 行未知。

最佳答案

该问题的解决方案是更改用于设置 php 扩展的 config.m4 文件,以便它包含对使用 PHP_ADD_LIBRARY_WITH_PATH 宏而不是 的 omniORB 库的引用PHP_ADD_LIBRARY 一个,尽管这些库位于默认的/usr/lib64 文件夹中。

我将整个文件作为工作引用。

dnl PHP extension definition written in C++ that uses the omniORB libraries
PHP_ARG_ENABLE(php_midas, whether to enable midas extension, [  --enable-php-midas   Enable PHP Midas extension])

if test "$PHP_MIDAS" != "no"; then    

    dnl -- Add support for standard C++ runtime    
    PHP_ADD_LIBRARY_WITH_PATH( stdc++, /usr/lib64/, PHP_MIDAS_SHARED_LIBADD)

    dnl -- Incldue the omniORB libraries
    PHP_ADD_LIBRARY_WITH_PATH(omniCodeSets4, /usr/lib64/, PHP_MIDAS_SHARED_LIBADD)
    PHP_ADD_LIBRARY_WITH_PATH(omniConnectionMgmt4, /usr/lib64/, PHP_MIDAS_SHARED_LIBADD)
    PHP_ADD_LIBRARY_WITH_PATH(omniDynamic4, /usr/lib64/, PHP_MIDAS_SHARED_LIBADD)
    PHP_ADD_LIBRARY_WITH_PATH(omniORB4, /usr/lib64/, PHP_MIDAS_SHARED_LIBADD)    
    PHP_ADD_LIBRARY_WITH_PATH(omnithread, /usr/lib64/, PHP_MIDAS_SHARED_LIBADD)

    dnl -- Our extension consists of two cpp files            
    PHP_NEW_EXTENSION(php_midas, php_midas.cpp coordinatesConverterSK.cpp, $ext_shared)

    PHP_SUBST(PHP_MIDAS_SHARED_LIBADD)

    dnl -- Declare C++ extension
    PHP_REQUIRE_CXX()
fi

关于带有 omniORB 库的 PHP 扩展 CORBA 客户端给出运行时错误 "undefined symbol ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31156116/

相关文章:

php - Zend 框架中使用的设计模式

php - 如果项目有许多(动态)属性,则多个左连接

c++ - QtCreator 和 ncurses

java - 将数组或序列传递给 idl Java Corba 中的函数

java - JVM 1.2 上的 CORBA 服务器和 1.3 上的客户端

java.lang.NoClassDefFoundError : org/omg/CORBA/InterfaceDef 错误

php - Javascript 数组通过 Ajax 传递给 PHP

php - "Unexpected EOF": How do I remove all newlines from php code?

c++ - 如何正确使用_beginthread和endthread

c++ - 将节点添加到 LinkedList 不是永久 C++