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?

È stato utile?

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"])
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top