autoconf仅在必要时设置-fPIC

时间:2011-01-24 20:54:50

标签: c shared-libraries mingw libtool

我正在使用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中手动执行此操作?

2 个答案:

答案 0 :(得分:4)

您不需要手动设置-fPIClibtool如果您告诉它正在构建哪种类型的二进制文件/库,则会添加它。

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