我们正在尝试用 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/