从 PHP 调用 C/C++ 库函数 - 在共享库中有多个 类
Calling C/C++ library function from PHP - with multiple classes in a shared library
阅读 this post and this article 我得到了我的第一个 PHP 扩展和 运行。
这是我使用的文章中的 config.m4
文件(为了清楚起见,我保留了文章中相同的 vehicles
和 car
class 名称,虽然我真正的 classes 有不同的名字):
PHP_ARG_ENABLE(vehicles,
[Whether to enable the "vehicles" extension],
[ --enable-vehicles Enable "vehicles" extension support])
if test $PHP_VEHICLES != "no"; then
PHP_REQUIRE_CXX()
PHP_SUBST(VEHICLES_SHARED_LIBADD)
PHP_ADD_LIBRARY(stdc++, 1, VEHICLES_SHARED_LIBADD)
PHP_NEW_EXTENSION(vehicles, vehicles.cc car.cc, $ext_shared)
fi
我现在需要的是移动到另一层代码组织如下:
a) 将 car
class 移动到与其他车辆 class 的公共车辆 class 文件夹中(truck
,bus
等)
b) 构建一个共享库将所有这些 classes
c) 从 PHP
调用共享库 class
所以,我会有如下目录结构:
vehicles -> src
= .cpp classes 和包含文件
vehicles -> lib
= vehicle.so 共享库
如何修改 config.m4
以使用此结构,考虑到所有车辆的 classes 都包含来自原始路径的文件,并将共享的 .so 库包含到最终构建的文件中.
感谢您的帮助。
PHP_ADD_LIBRARY_WITH_PATH
成功了。根据需要多次使用它(用于添加多个库)。
最终代码:
PHP_ARG_ENABLE(vehicles,
[Whether to enable the "vehicles" extension],
[ --enable-vehicles Enable "vehicles" extension support])
if test $PHP_VEHICLES != "no"; then
PHP_ADD_LIBRARY_WITH_PATH(libraryname1, /etc/whatever_path_to_library, VEHICLES_SHARED_LIBADD)
PHP_ADD_LIBRARY_WITH_PATH(libraryname2, /etc/whatever_path_to_library, VEHICLES_SHARED_LIBADD)
PHP_ADD_LIBRARY_WITH_PATH(libraryname3, /etc/whatever_path_to_library, VEHICLES_SHARED_LIBADD)
PHP_REQUIRE_CXX()
PHP_SUBST(VEHICLES_SHARED_LIBADD)
PHP_ADD_LIBRARY(stdc++, 1, VEHICLES_SHARED_LIBADD)
PHP_NEW_EXTENSION(vehicles, vehicles.cc car.cc, $ext_shared)
fi
阅读 this post and this article 我得到了我的第一个 PHP 扩展和 运行。
这是我使用的文章中的 config.m4
文件(为了清楚起见,我保留了文章中相同的 vehicles
和 car
class 名称,虽然我真正的 classes 有不同的名字):
PHP_ARG_ENABLE(vehicles,
[Whether to enable the "vehicles" extension],
[ --enable-vehicles Enable "vehicles" extension support])
if test $PHP_VEHICLES != "no"; then
PHP_REQUIRE_CXX()
PHP_SUBST(VEHICLES_SHARED_LIBADD)
PHP_ADD_LIBRARY(stdc++, 1, VEHICLES_SHARED_LIBADD)
PHP_NEW_EXTENSION(vehicles, vehicles.cc car.cc, $ext_shared)
fi
我现在需要的是移动到另一层代码组织如下:
a) 将 car
class 移动到与其他车辆 class 的公共车辆 class 文件夹中(truck
,bus
等)
b) 构建一个共享库将所有这些 classes
c) 从 PHP
调用共享库 class所以,我会有如下目录结构:
vehicles -> src
= .cpp classes 和包含文件
vehicles -> lib
= vehicle.so 共享库
如何修改 config.m4
以使用此结构,考虑到所有车辆的 classes 都包含来自原始路径的文件,并将共享的 .so 库包含到最终构建的文件中.
感谢您的帮助。
PHP_ADD_LIBRARY_WITH_PATH
成功了。根据需要多次使用它(用于添加多个库)。
最终代码:
PHP_ARG_ENABLE(vehicles,
[Whether to enable the "vehicles" extension],
[ --enable-vehicles Enable "vehicles" extension support])
if test $PHP_VEHICLES != "no"; then
PHP_ADD_LIBRARY_WITH_PATH(libraryname1, /etc/whatever_path_to_library, VEHICLES_SHARED_LIBADD)
PHP_ADD_LIBRARY_WITH_PATH(libraryname2, /etc/whatever_path_to_library, VEHICLES_SHARED_LIBADD)
PHP_ADD_LIBRARY_WITH_PATH(libraryname3, /etc/whatever_path_to_library, VEHICLES_SHARED_LIBADD)
PHP_REQUIRE_CXX()
PHP_SUBST(VEHICLES_SHARED_LIBADD)
PHP_ADD_LIBRARY(stdc++, 1, VEHICLES_SHARED_LIBADD)
PHP_NEW_EXTENSION(vehicles, vehicles.cc car.cc, $ext_shared)
fi