从PHP调用C / C ++库函数 - 在共享库中有多个类

时间:2015-08-03 19:27:19

标签: php c++ c php-extension

阅读this postthis article我启动并运行了第一个PHP扩展程序。

以下是我使用的文章中的config.m4文件(为了清楚起见,我保留了文章中相同的vehiclescar类名称,尽管我的真实课程有所不同名称):

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班级移动到与其他车辆类别(truckbus等)共同的车辆类别文件夹中。

b)为所有这些类构建共享库

c)从PHP中调用共享库类

所以,我会有以下目录结构:

vehicles -> src = .cpp类和包含文件

vehicles -> lib = vehicle.so共享库

如何修改config.m4以使用此结构,考虑所有车辆类包括原始路径中的文件,并包括共享.so库到最终构建。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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