从 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 文件(为了清楚起见,我保留了文章中相同的 vehiclescar 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) 将 carclass 移动到与其他车辆 class 的公共车辆 class 文件夹中(truckbus等)

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