Apache Modul mit apxs kompilieren

  • Apache Modul mit apxs kompilieren

    Moin!

    Ich spiele gerade mit dtrace herum und versuche das mod_dtrace (prefetch.net/projects/apache_modtrace/index.html) für den Apachen zu bauen. Für mein MBP brauche ich die x86_64 Variante. Die 32 Bit Variante klappt, aber nicht die Variante für das 64 Bit Binary:

    Quellcode

    1. $ apxs -c -D dtrace=apache.d -Wc," -arch i386 -arch ppc7400 " -Wl," -arch i386 -arch ppc7400 " mod_dtrace.c
    2. /usr/share/apr-1/build-1/libtool --silent --mode=compile gcc -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -no-cpp-precomp -I/usr/include/apache2 -I/usr/include/apr-1 -I/usr/include/apr-1 -arch i386 -arch ppc7400 -Ddtrace=apache.d -c -o mod_dtrace.lo mod_dtrace.c && touch mod_dtrace.slo
    3. /usr/share/apr-1/build-1/libtool --silent --mode=link gcc -o mod_dtrace.la -arch i386 -arch ppc7400 -rpath /usr/libexec/apache2 -module -avoid-version mod_dtrace.lo
    4. $ file .libs/mod_dtrace.so
    5. .libs/mod_dtrace.so: Mach-O universal binary with 2 architectures
    6. .libs/mod_dtrace.so (for architecture i386): Mach-O bundle i386
    7. .libs/mod_dtrace.so (for architecture ppc7400): Mach-O bundle ppc


    Für die 64 Bit Variante gibt es komische Fehler:

    Quellcode

    1. $ apxs -c -D dtrace=apache.d -Wc," -arch ppc64 " -Wl," -arch ppc64 " mod_dtrace.c
    2. /usr/share/apr-1/build-1/libtool --silent --mode=compile gcc -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -no-cpp-precomp -I/usr/include/apache2 -I/usr/include/apr-1 -I/usr/include/apr-1 -arch ppc64 -Ddtrace=apache.d -c -o mod_dtrace.lo mod_dtrace.c && touch mod_dtrace.slo
    3. mod_dtrace.c: In function ‘apache_create_child’:
    4. mod_dtrace.c:120: error: syntax error before ‘)’ token
    5. apxs:Error: Command failed with rc=65536


    bzw.

    Quellcode

    1. $ apxs -c -D dtrace=apache.d -Wc," -arch x86_64 " -Wl," -arch x86_64 " mod_dtrace.c /usr/share/apr-1/build-1/libtool --silent --mode=compile gcc -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK -no-cpp-precomp -I/usr/include/apache2 -I/usr/include/apr-1 -I/usr/include/apr-1 -arch x86_64 -Ddtrace=apache.d -c -o mod_dtrace.lo mod_dtrace.c && touch mod_dtrace.slo
    2. /var/folders/5n/5ntKnOmOE+CLAwYXfQ9xE++++TM/-Tmp-//ccGWLOh5.s:89:bad register name `%%esi)'
    3. apxs:Error: Command failed with rc=65536


    Gibt es da noch ein paar andere Flags, die ich einsetzen muss?

    Viele Grüsse,
    Christian
  • Nö, die Bezeichner für die Architekturen sind ok. Ich habe mir vorher schon fat-binaries von anderen Tools gebaut:

    Quellcode

    1. $ file /usr/local/mysql/libexec/mysqld
    2. /usr/local/mysql/libexec/mysqld: Mach-O universal binary with 4 architectures
    3. /usr/local/mysql/libexec/mysqld (for architecture i386): Mach-O executable i386
    4. /usr/local/mysql/libexec/mysqld (for architecture x86_64): Mach-O 64-bit executable x86_64
    5. /usr/local/mysql/libexec/mysqld (for architecture ppc7400): Mach-O executable ppc
    6. /usr/local/mysql/libexec/mysqld (for architecture ppc64): Mach-O 64-bit executable ppc64
  • RE: Apache Modul mit apxs kompilieren

    Nope... keine #ifdefs sind im Source. Vermutlich werde mich noch etwas tiefer mit dtrace auseinander setzen müssen und erst einmal mit den Tools experimentieren, die out-of-the-box vorhanden sind und funktionieren. Selbst das scheint schon schwierig genug zu sein...
  • RE: Apache Modul mit apxs kompilieren

    Ich gehe mal davon aus, dass du keinen (Inline-)Assembler in der Quelle hast. Das hättest du doch erwähnt.

    Es wird angemeckert, dass ein Register benutzt wird, welches nicht existiert. (Ih habe dsa jetzt nicht für x86_64 überprüft, glaube dem aber mal.) Also kann es eigentlich nur zwei Fehler geben:

    a) Irgendwie hat sich ein altes Stück Zwischencode in die 64er-Version hereinegeschmuggelt. Hast du wirklich alle Zielcode-Daten entfernt? (Ja, ja, ja, ich weiß …)

    b) Compiler ist im Arsch.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • RE: Apache Modul mit apxs kompilieren

    Hmmm... könnte das hier der Grund sein, weshalb die 64bit Varianten nicht hinhauen:

    Quellcode

    1. $ file /usr/lib/libdtrace.dylib
    2. /usr/lib/libdtrace.dylib: Mach-O universal binary with 2 architectures
    3. /usr/lib/libdtrace.dylib (for architecture ppc7400): Mach-O dynamically linked shared library ppc
    4. /usr/lib/libdtrace.dylib (for architecture i386): Mach-O dynamically linked shared library i386