我收到了一个input[type=checkbox] {
opacity: 0;
padding-right: 10px (or whichever size that fits);
}
文件,我无法查看它的源代码,我可以使用下一个命令编译我的c文件:
libxxx.so
gcc -ldl libxxx.so my.c -a a.out
在命令行中运行良好。但是在我将其包装到a.out
扩展名后,PHP
会显示如下消息:
PHP
xxxfunction是PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/myextension.so' - /usr/lib64/php/modules/myextension.so: undefined symbol: xxxfunction in Unknown on line 0
导出的函数。
我是libxxx.so
的新手,我认为问题是编译我的C
扩展程序的方式,我搜索谷歌但没有找到答案。
我想知道在 gcc 中是否有像 -ldl 这样的选项,所以我可以指定我将在我的{中使用libxxx.so {1}}延伸。
我按照后续步骤编译了我的扩展程序:
PHP
我已将PHP
文件移至cd myextension/
phpize
./configure
make
make install
我的/etc/ld.so.conf:
libxxx.so
我已经破了/usr/local/lib
。
答案 0 :(得分:1)
您需要告诉构建系统在编译时链接到共享库。这允许依赖项存储在已编译的PHP扩展中,在第一次使用时将加载它。
为此,您需要修改config.m4
以添加库。您可以通过PHP_ADD_LIBRARY
宏执行此操作。此宏将一个库添加到链接行,其格式为PHP_ADD_LIBRARY($name,$append,$var)
。第一个参数是库的名称;这是没有*.so
前缀的lib
文件的名称(例如xxx
)。第二个参数确定(我推测)是否附加或覆盖该行;通常应将此设置为1
。最后一个参数是存储该行的变量名。必须通过PHP_SUBST
将此变量替换为输出文件。
您应该将PHP_ADD_LIBRARY
行放在PHP_NEW_EXTENSION
文件中的config.m4
宏之前的某个位置。此外,将PHP_ADD_LIBRARY
包裹在PHP_CHECK_LIBRARY
电话中也是一个好主意。这可确保构建系统在添加库之前找到库。请参阅下面的示例。
Here是另一个类似于你的问题。它有一些你可以遵循的工作实例。另外,我在这里包含一个简单的例子:
PHP_CHECK_LIBRARY(xxx,xxxfunction,[
PHP_ADD_LIBRARY(xxx,1,XXX_SHARED_LIBADD)
],[
AC_MSG_ERROR([Please install libxxx on the system])
],
[])
PHP_SUBST([XXX_SHARED_LIBADD])
注意:PHP_CHECK_LIBRARY
的第二个参数是一个函数,构建系统将检查它是否找到给定的库。