Autoconf set -fpic必要な場合にのみ
-
24-10-2019 - |
質問
LinuxとWindows(MINGWクロスコンパイラを使用)にコンパイルしたいAutoconf/libtoolを使用して共有ライブラリを書いています。 Linux(およびおそらくそれをサポートする他のプラットフォーム)については、-fpicを設定する必要があります。それで、私はそれをmakefile.amのcflagsに入れました。しかし、Mingwとクロスコンパイルすると、GCCは警告に不満を言います。
warning: -fPIC ignored for target (all code is position independent)
したがって、明らかに、このオプションはWindowsコードには必要ありません。それはただの警告ですが、とにかくそれを取り除きたいです。これどうやってするの?たぶん、オプションがサポートされているかどうかをチェックし、必要なときにのみ設定するLibtool/Autoconf機能がすでにあるので、makefile.amでこれを手動で行う必要はありませんか?
解決
設定する必要はありません -fPIC
手動で、 libtool
どのタイプのバイナリ/ライブラリを構築しているかを伝えると、それを追加します。
lib_LTLIBRARIES = mylibrary.la
mylibrary_la_SOURCES = mylibrary.c
これは両方を生成できます mylibrary.so
写真(必要に応じて)とa mylibrary.a
なく、他のAutoCONF/Automakeオプションに依存します。 (おそらくのようなものです .dll
と .lib
Windowsで、しかし私はそのプラットフォームを使用していません。)
他のヒント
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"])
所属していません StackOverflow