Autoconf set -fpic nur bei Bedarf
-
24-10-2019 - |
Frage
Ich schreibe eine gemeinsame Bibliothek mit Autoconf/libtool, die ich für Linux und Windows (mit dem Mingw Cross-Compiler) kompilieren möchte. Für Linux (und vielleicht andere Plattformen, die es unterstützen) muss ich -fpic einstellen. Also stecke ich es in die CFLAGs in makefile.am. Aber wenn ich es mit Mingw zusammenkompiliere, beschwert sich GCC mit einer Warnung:
warning: -fPIC ignored for target (all code is position independent)
Für Windows -Code wird diese Option offensichtlich nicht benötigt. Es ist nur eine Warnung, aber ich möchte sie trotzdem loswerden. Wie kann ich das machen? Vielleicht gibt es bereits eine Libtool/Autoconf -Funktion, die überprüft, ob die Option unterstützt wird und sie nur bei Bedarf festlegt, sodass ich dies nicht manuell in makefile.am machen muss?
Lösung
Sie sollten nicht einstellen müssen -fPIC
manuell, libtool
Fügt es hinzu, wenn Sie es sagen, welche Art von Binär-/Bibliothek Sie bauen.
lib_LTLIBRARIES = mylibrary.la
mylibrary_la_SOURCES = mylibrary.c
Dies kann beide erzeugen mylibrary.so
mit Bild (falls erforderlich) und a mylibrary.a
Ohne abhängig von anderen Autokonf-/Automobiloptionen. (Wahrscheinlich so etwas wie .dll
und .lib
unter Windows, aber ich benutze diese Plattform nicht.)
Andere Tipps
Ich habe Folgendes in configure.ac verwendet, um -fpic bedingt hinzuzufügen:
AC_MSG_CHECKING(whether fPIC compiler option is accepted)
SAVED_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -fPIC -Werror"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return 0;])],
[AC_MSG_RESULT(yes)
CFLAGS="$SAVED_CFLAGS -fPIC"],
[AC_MSG_RESULT(no)
CFLAGS="$SAVED_CFLAGS"])