2011-01-24 49 views
3

我在使用autoconf/libtool寫一個共享庫,我想爲Linux和Windows編譯(使用mingw交叉編譯器)。對於Linux(以及其他支持它的平臺),我需要設置-fPIC。所以我把它放到Makefile.am中的CFLAGS中。但是,當我使用MinGW交叉編譯然後GCC抱怨一個警告:所以,很顯然不需要對Windows代碼autoconf設置-fPIC只在必要時

warning: -fPIC ignored for target (all code is position independent) 

此選項。這只是一個警告,但我想要擺脫它。我怎樣才能做到這一點?也許已經有一個libtool/autoconf功能來檢查該選項是否受支持,並且只在需要時進行設置,因此我不必在Makefile.am中手動執行此操作。

回答

4

你不需要手動設置-fPIC,如果你告訴它你正在構建什麼類型的二進制/庫,libtool會添加它。

lib_LTLIBRARIES = mylibrary.la 
mylibrary_la_SOURCES = mylibrary.c 

這可以產生既與PIC一個mylibrary.so(如果需要)和mylibrary.a沒有,這取決於其它的Autoconf/Automake的選項。 (大概就像在Windows .dll.lib,但我不使用該平臺。)

+0

這很簡單。我只是不得不刪除它,它的工作原理。我覺得很愚蠢。謝謝。 – kayahr 2011-01-24 21:32:21

0

我已經使用在configure.ac以下有條件地添加-fPIC:

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"])