4

我正在使用我想为 Linux 和 Windows 编译的 autoconf/libtool 编写一个共享库(使用 mingw 交叉编译器)。对于 Linux(可能还有其他支持它的平台),我需要设置 -fPIC。所以我把它放到 Makefile.am 中的 CFLAGS 中。但是当我用 mingw 交叉编译它时,gcc 会发出警告:

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

所以显然 Windows 代码不需要这个选项。这只是一个警告,但无论如何我都想摆脱它。我怎样才能做到这一点?也许已经有一个 libtool/autoconf 功能可以检查该选项是否受支持,并且只在需要时设置它,所以我不必在 Makefile.am 中手动执行此操作?

4

2 回答 2

5

您不需要-fPIC手动设置,libtool如果您告诉它您正在构建什么类型的二进制/库,则会添加它。

lib_LTLIBRARIES = mylibrary.la
mylibrary_la_SOURCES = mylibrary.c

这可以生成mylibrary.so带有 PIC(如果需要)和mylibrary.a不带 PIC,具体取决于其他 Autoconf/Automake 选项。(可能类似于Windows 上的.dll.lib,但我不使用那个平台。)

于 2011-01-24T21:12:18.120 回答
2

我在 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"])
于 2016-01-29T14:02:28.587 回答