2017-02-13 2 views
1

필자는 성공적으로 컴파일하는 데 어려움을 겪고있는 PHP 확장 프로그램에 대한 extenal 종속성을 가지고 있습니다. 이 확장을 독립형 공유 객체로하고 싶습니다. 이해할 수있는 것은 phpize입니다. 이 공유 PHP 확장을 객체 파일 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),하지만 컴파일 시간에 내 의존성을 추가하는 방법에 대해 잘 모르겠습니다. 이 유스 케이스에 대해 위와 유사한 매크로가 있습니까?

나는 억압 코드에 액세스 할 수 없다는 점에 유의할 가치가 있으므로 c.o은이 문제를 해결하기 위해 수정할 수 없습니다.

답변

0

귀하의 질문에서 이해할 수있는 것부터, PHP 확장에 링크하려는 위치 독립적 코드 (예 : -fPIC 옵션)를 사용하도록 컴파일되지 않은 객체 파일 c.o이 있습니다. 이 경우 확장 코드 및 모든 공유 라이브러리와 함께 정적 링크해야합니다. config.m4 파일에서이 작업을 수행 할 수있는 몇 가지 방법이 있습니다.

LDFLAGS=c.o 

내가 시도 할 때 :

CFLAGS=-Wl,c.o 

두 번째는 LDFLAGS을 수정하는 것입니다 :

첫 번째과 같이 링커에 개체 코드 파일의 이름을 전달하는 CFLAGS을 설정하는 것입니다 두 번째 컴파일 중에 다음과 같은 경고 메시지가 나타납니다.

모든 것은 어느쪽으로 든 작동하므로 경고가 무엇인지 잘 모르겠습니다. 그러나 첫 번째 방법은 경고를 생성하지 않습니다. 나는이 질문에 답변이 되었기를 바랍니다

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 

:

은 여기에 전체 샘플 config.m4입니다.