2017-02-13 78 views
1

我有一個額外的依賴爲我的PHP擴展,我努力成功編譯。我想這個擴展是一個獨立的共享對象,據我所知這是phpize的工作。我該如何去編譯這個共享的PHP擴展和一個目標文件c.oPHP擴展庫依賴

爲獨立的應用程序將如下所述的手動編譯如下:

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),但我不知道如何在編譯時添加我的依賴關係。這個用例是否有類似於上面的宏?

值得注意的是我沒有訪問deprations代碼,所以c.o不能修改來解決這個問題。

回答

0

根據我對您的問題的理解,您有一個目標文件c.o,它沒有被編譯爲具有與您的PHP擴展連接的與位置無關的代碼(即-fPIC選項)。在這種情況下,您必須將其與擴展代碼和任何共享庫一起靜態鏈接。有幾種方法可以在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 

我希望這回答了這個問題。

相關問題