autoconf устанавливает -fPIC только при необходимости - PullRequest
3 голосов
/ 24 января 2011

Я пишу общую библиотеку, используя 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?*1004

Ответы [ 2 ]

4 голосов
/ 25 января 2011

Вам не нужно устанавливать -fPIC вручную, libtool добавит его, если вы скажете, какой тип бинарника / библиотеки вы создаете.

lib_LTLIBRARIES = mylibrary.la
mylibrary_la_SOURCES = mylibrary.c

В зависимости от других параметров Autoconf / Automake можно получить mylibrary.so с PIC (при необходимости) и mylibrary.a без. (Возможно, что-то вроде .dll и .lib в Windows, но я не использую эту платформу.)

1 голос
/ 29 января 2016

Я использовал следующее в 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"])
...