c - PHP 扩展库依赖项



我的PHP扩展有一个扩展依赖项,我正在努力成功编译。 我希望这个扩展是一个独立的共享对象,据我了解,这是phpize的工作。 如何使用c.o对象文件编译此共享 PHP 扩展?

独立应用程序的手动编译如下所示:

gcc -Wall -o php_library main.c c.o

对于共享库:

gcc -Wall -shared -fPIC -o php_library.so main.c c.o

我知道有一些宏可以通过修改config.m4来添加共享库依赖项,例如:PHP_ADD_LIBRARY(pthread,,EXTENSION_SHARED_LIBADD) ,但我不确定如何在编译时添加我的依赖项。 对于此用例,是否有类似于上述的宏?

值得注意的是,我无法访问depdency code,因此无法修改c.o来解决此问题。

根据我从您的问题中了解到的情况,您有一个对象文件c.o该文件未编译为具有与位置无关的代码(即 -fPIC选项(,您希望链接到 PHP 扩展。在这种情况下,您必须将其与扩展代码和任何共享库静态链接。在config.m4文件中有几种方法可以执行此操作。

第一种是设置 CFLAGS 将目标代码文件的名称传递给链接器,如下所示:

CFLAGS=-Wl,c.o

二是修改LDFLAGS

LDFLAGS=c.o

当我尝试第二个时,我在编译过程中收到以下警告:

*** Warning: Linking the shared library testbed.la against the non-libtool
*** objects  c.o is not portable!

无论哪种方式,一切都很好,所以我不确定警告是怎么回事。但第一种方法不会生成警告。

下面是一个完整的示例config.m4

PHP_ARG_ENABLE(testbed, whether to enable testbed support,
[ --enable-testbed   Enable testbed support])
if test "$PHP_TESTBED" = "yes"; then
  AC_DEFINE(HAVE_TESTBED, 1, [Whether you have testbed support])
  PHP_NEW_EXTENSION(testbed, testbed.c, $ext_shared)
  #LDFLAGS=c.o
  CFLAGS=-Wl,c.o
fi

我希望这能回答这个问题。

相关内容

  • 没有找到相关文章

最新更新