【问题标题】:autoconf set -fPIC only when necessaryautoconf 仅在必要时设置 -fPIC
【发布时间】:2011-01-24 20:54:50
【问题描述】:

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

【问题讨论】:

    标签: c shared-libraries mingw libtool


    【解决方案1】:

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

    lib_LTLIBRARIES = mylibrary.la
    mylibrary_la_SOURCES = mylibrary.c
    

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

    【讨论】:

    • 这很简单。我只需要删除它就可以了。我觉得自己好傻。谢谢。
    • “你应该不需要手动设置-fPIC……” - 啊,理论和实践的区别……
    【解决方案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"])
    

    【讨论】:

      猜你喜欢
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-25
      • 1970-01-01
      • 2015-10-02
      • 2012-06-23
      • 2016-01-22
      相关资源
      最近更新 更多