从PHP调用.so共享库对象

3

我有一个静态链接的 .so 文件,我需要调用其中一个函数,该函数的第一个参数是要处理的数据的内存地址。我已经在 Pascal 中编写了一个示例调用程序,但我想知道是否可以从 PHP 调用此库函数?如果可以,应该如何操作呢? 注意:这个 .so 文件不是作为 PHP 扩展编写的。


你不会“调用一个库”。你会在库中调用函数。 - Lightness Races in Orbit
好的,为了澄清,我添加了一些函数术语。 - Reese
2个回答

1
由于我想要使用的库不是作为PHP扩展编写的,因此我必须用C语言编写一个包装扩展,创建一个PHP方法,该方法接受PHP参数并在将它们转换后(例如使用内存地址指针)调用库函数。

2
希望能看到示例? - Mark Anderson

0

要在运行时加载PHP扩展,您可以使用dl()函数。

if (!extension_loaded('myextension')) {
   dl('myextension.so');
}

然后,您应该能够从该库中使用您的对象/函数。

另一件需要记住的事情是,您的php.ini中的enable_dl指令需要启用。


4
这个.so文件不是作为PHP扩展编写的,难道它不需要满足某些要求吗? - Reese
1
@Reese,文档中没有关于此的说明。尝试加载它并查看是否有效。 - Shoe
你可能需要修改.so文件以使其作为PHP扩展工作。http://devzone.zend.com/303/extension-writing-part-i-introduction-to-php-and-zend/ - Jeremy Harris
我无法访问用于编译.so的源代码。你是说在PHP中使用.so中的函数的唯一方法是将其编译为PHP扩展吗? - Reese

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接