Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP扩展库依赖项_Php_C_Php Extension - Fatal编程技术网

PHP扩展库依赖项

PHP扩展库依赖项,php,c,php-extension,Php,C,Php Extension,我的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\u ADD\u libra

我的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\u ADD\u library(pthread,,EXTENSION\u shared\u LIBADD)
,但我不确定如何在编译时添加依赖项。对于这个用例,是否有类似于上述的宏


值得注意的是,我无法访问depdency代码,因此无法修改
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

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

根据我对您的问题的理解,您有一个对象文件
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
我希望这能回答这个问题