使用SWIG编译PHP扩展

时间:2019-05-04 23:05:01

标签: php c++ linker swig php-extension

我正在尝试将crfsuite的Swig接口编译为PHP模块。到目前为止,我已经成功地编译了crfsuite.so文件,将其作为PHP的扩展加载并在其上调用方法。据我所知,SWIG包装的任何方法调用都可以直接使用。不幸的是,我似乎缺少一些符号:

❯ nm crfsuite.so | grep crfsuite
                 U crfsuite_attribute_set
                 U crfsuite_create_instance
                 U crfsuite_create_instance_from_file
                 U crfsuite_create_instance_from_memory
                 U crfsuite_data_append
                 U crfsuite_data_finish
                 U crfsuite_data_init
00000000000281b3 T crfsuite_dictionary_create_instance
                 U crfsuite_evaluation_accmulate
                 U crfsuite_evaluation_finalize
                 U crfsuite_evaluation_init
                 U crfsuite_evaluation_output
0000000000256460 B crfsuite_globals
                 U crfsuite_instance_finish
                 U crfsuite_instance_init_n
                 U crfsuite_interlocked_decrement
                 U crfsuite_interlocked_increment
                 U crfsuite_item_append_attribute
                 U crfsuite_item_init
                 U crfsuite_item_init_n

我已经使用默认的export.i生成了Swig包装器:

swig -c++ -php7 -Icrfsuite/include -o export_wrap.cpp export.i

之后,我使用以下命令编译了代码:

gcc -fpic -Icrfsuite/include -Icrfsuite/lib/cqdb/include -Iliblbfgs/include \ 
    `php-config --includes` -c crfsuite.cpp export_wrap.cpp crfsuite/lib/crf/src/*.c \ 
    crfsuite/swig/*.cpp crfsuite/lib/cqdb/src/cqdb.c crfsuite/lib/cqdb/src/lookup3.c \
    liblbfgs/lib/*.c
gcc -shared *.o -o crfsuite.so

我玩过许多gcc标记,例如-L/usr/local/lib-lcrfsuite-Wl,-undefined,dynamic_lookup,但由于它们似乎并不影响结果而停止了。

运行基本示例错误并显示以下消息:

 /usr/bin/php: symbol lookup error: /usr/lib/php/20170718/crfsuite.so: undefined symbol: crfsuite_data_init

该示例正确调用了Trainer constructor

这都是很新的东西,所以我迷失在许多步骤之间。我是否缺少明显的东西?为什么符号未正确链接?以及如何解决?

更新:

我已将$LD_LIBRARY_PATH$LD_RUN_PATH设置为/usr/local/lib。这也是crfsuite的编译和安装版本作为共享库的位置:

ll $LD_LIBRARY_PATH/libcrfsuite.so
/usr/local/lib/libcrfsuite.so -> libcrfsuite-0.12.so

我还更改了.o文件的顺序。没有任何改变。

0 个答案:

没有答案