AUTOCONF SET -FPIC только при необходимости
-
24-10-2019 - |
Вопрос
Я пишу общую библиотеку, используя AutoConf/Libtool, которую я хочу собрать для Linux и для Windows (используя кросс-компилятор Mingw). Для Linux (и, возможно, других платформ, которые поддерживают его), мне нужно установить -fpic. Поэтому я положил его в cflags в makefile.am. Но когда я перекрестный его с помощью 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
с рис (при необходимости) и 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"])