autoconf mis en -fPIC seulement si nécessaire
-
24-10-2019 - |
Question
J'écris une bibliothèque partagée en utilisant autoconf / libtool que je veux compiler pour Linux et pour Windows (Utilisation du compilateur croisé MinGW). Pour Linux (et peut-être d'autres plates-formes qui la soutiennent) Dois-je définir -fPIC. Alors je l'ai mis dans les CFLAGS dans Makefile.am. Mais quand je le cross-compiler avec MinGW alors gcc se plaint d'un avertissement:
warning: -fPIC ignored for target (all code is position independent)
Alors, évidemment, cette option est nécessaire pour le code de Windows. Il est seulement un avertissement, mais je veux me débarrasser de toute façon. Comment puis-je faire ceci? Peut-être il y a déjà un libtool / autoconf fonction qui vérifie si l'option est prise en charge et il définit uniquement en cas de besoin, donc je ne dois pas le faire manuellement dans Makefile.am?
La solution
Vous ne devriez pas avoir à -fPIC
définie manuellement, libtool
ajoutera si vous lui dites quel type de bibliothèque binaire / vous construisez.
lib_LTLIBRARIES = mylibrary.la
mylibrary_la_SOURCES = mylibrary.c
Cela peut produire à la fois un mylibrary.so
avec PIC (si nécessaire) et un mylibrary.a
sans, selon les autres options Autoconf / Automake. (Probablement quelque chose comme .dll
et .lib
sous Windows, mais je ne l'utilise pas cette plate-forme.)
Autres conseils
J'ai utilisé ce qui suit dans configure.ac ajouter -fPIC sous condition:
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"])