2017-02-13 4 views
1

Ich habe eine extenal Abhängigkeit für meine PHP-Erweiterung, die ich kämpfe, um erfolgreich zu kompilieren. Ich möchte, dass diese Erweiterung ein eigenständiges gemeinsames Objekt ist, das, wie ich es verstehe, die Aufgabe von phpize ist. Wie kann ich diese freigegebene PHP-Erweiterung mit einer Objektdatei c.o kompilieren?PHP Erweiterung Bibliothek Abhängigkeit

Die manuelle Kompilierung für eine Standalone-Anwendung wie folgt aussehen:

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

und für eine gemeinsame Bibliothek:

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

Ich verstehe, dass es Makros für das Hinzufügen in gemeinsam genutzten Bibliothek Abhängigkeiten durch Modifizieren wie: PHP_ADD_LIBRARY(pthread,,EXTENSION_SHARED_LIBADD), aber ich bin mir nicht sicher, wie man meine Abhängigkeit zur Kompilierzeit hinzufügen. Gibt es für diesen Anwendungsfall ein ähnliches Makro?

Es ist erwähnenswert, dass ich keinen Zugriff auf den Dependency-Code habe, daher kann c.o nicht geändert werden, um dieses Problem zu lösen.

Antwort

0

Von was ich von Ihrer Frage verstehe, haben Sie eine Objektdatei c.o, die nicht kompiliert wurde, um positionsunabhängigen Code (d. H. -fPIC Option), die Sie in Ihre PHP-Erweiterung verknüpfen möchten. In diesem Fall müssen Sie sie neben dem Erweiterungscode und allen gemeinsam genutzten Bibliotheken statisch verknüpfen. Es gibt mehrere Möglichkeiten, dies in der Datei zu tun.

Die erste ist CFLAGS, um den Namen der Objektcodedatei an die Linker wie so passieren:

CFLAGS=-Wl,c.o 

Die zweite ist LDFLAGS zu ändern:

LDFLAGS=c.o 

Wenn ich das versuchen zweitens bekomme ich beim Kompilieren folgende Warnung:

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

Alles funktioniert so oder so, ich bin mir nicht sicher, was mit der Warnung los ist. Aber die erste Methode generiert die Warnung nicht.

ist die komplette Probe 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 

Ich hoffe, das die Frage beantwortet.

Verwandte Themen