我正在使用autoconf / libtool编写一个共享库,我想为Linux和Windows编译(使用mingw交叉编译器)。对于Linux(以及可能支持它的其他平台),我需要设置-fPIC。所以我将它放入Makefile.am中的CFLAGS中。但是当我用mingw交叉编译它时,gcc会发出警告:
warning: -fPIC ignored for target (all code is position independent)
很明显,Windows代码不需要此选项。这只是一个警告,但无论如何我想要摆脱它。我怎样才能做到这一点?也许已经有一个libtool / autoconf功能,它检查选项是否受支持,只在需要时设置它,所以我不必在Makefile.am中手动执行此操作?
答案 0 :(得分:4)
您不需要手动设置-fPIC
,libtool
如果您告诉它正在构建哪种类型的二进制文件/库,则会添加它。
lib_LTLIBRARIES = mylibrary.la
mylibrary_la_SOURCES = mylibrary.c
根据其他Autoconf / Automake选项,这可以产生mylibrary.so
PIC(如果需要)和mylibrary.a
没有。 (在Windows上可能类似.dll
和.lib
,但我不使用该平台。)
答案 1 :(得分:1)
我在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"])