Вопрос

Я пишу общую библиотеку, используя 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"])
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top