autoconf impostato solo quando necessario -fPIC
-
24-10-2019 - |
Domanda
Sto scrivendo una libreria condivisa utilizzando autoconf / libtool cui voglio compilare per Linux e per Windows (Usando l'mingw cross-compilatore). Per Linux (e forse altre piattaforme che lo supportano) Ho bisogno di impostare -fPIC. Così ho messo nelle CFLAGS in Makefile.am. Ma quando ho compilazione incrociata con MinGW gcc poi si lamenta con un avvertimento:
warning: -fPIC ignored for target (all code is position independent)
Quindi, ovviamente, questa opzione non è necessaria per il codice di Windows. E 'solo un avvertimento ma voglio sbarazzarsi di esso in ogni caso. Come posso fare questo? Forse v'è già un libtool / autoconf caratteristica che controlla se l'opzione è supportata e imposta solo quando necessario in modo che non c'è bisogno di farlo manualmente in Makefile.am?
Soluzione
Non dovrebbe essere necessario per -fPIC
insieme manualmente, libtool
aggiungerà, se gli si dice che tipo di biblioteca / binario che si sta costruendo.
lib_LTLIBRARIES = mylibrary.la
mylibrary_la_SOURCES = mylibrary.c
Questo può produrre sia un mylibrary.so
con PIC (se necessario) e una mylibrary.a
, senza, a seconda delle altre opzioni Autoconf / automake. (Probabilmente qualcosa come .dll
e .lib
su Windows, ma io non uso quella piattaforma.)
Altri suggerimenti
ho usato il seguente in configure.ac aggiungere -fPIC condizionale:
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"])