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?

Était-ce utile?

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"])
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top