2011-01-24 7 views
3

Linux 및 Windows 용으로 컴파일하려는 autoconf/libtool을 사용하여 공유 라이브러리를 작성합니다 (mingw 크로스 컴파일러 사용). 리눅스 (그리고 어쩌면 그것을 지원하는 다른 플랫폼)의 경우 -fPIC을 설정해야합니다. 그래서 Makefile.am의 CFLAGS에 넣었습니다. 나는 때와 Mingw로 크로스 컴파일 한 후 GCC는 경고와 함께 불평 : autoconf는 필요할 때만 -fPIC을 설정합니다.

warning: -fPIC ignored for target (all code is position independent) 

가 그래서 분명히이 옵션을 Windows 코드 필요하지 않습니다. 그것은 단지 경고이지만 어쨌든 그것을 제거하고 싶습니다. 어떻게해야합니까? 어쩌면 옵션이 지원되는지 확인하고 필요한 경우에만 설정하므로 Makefile.am에서 수동으로 할 필요가없는 libtool/autoconf 기능이 이미있을 수 있습니까?

답변

4

수동으로 -fPIC을 설정할 필요가 없으며, 작성중인 이진/라이브러리 유형을 알리는 경우 libtool을 추가하면됩니다.

lib_LTLIBRARIES = mylibrary.la 
mylibrary_la_SOURCES = mylibrary.c 

이 생산할 수있는 양 (필요한 경우) PIC와 mylibrary.so 및 기타의 Autoconf/Automake는 옵션에 따라이없는 mylibrary.a. (Windows의 .dll.lib 같은 아마 뭔가,하지만 난 그 플랫폼을 사용하지 않습니다.)

+0

하는 것은 간단했다. 난 그냥 그것을 제거하고 작동합니다. 나는 너무 어리 석다. 감사. – kayahr

+0

* "수동으로 -fPIC을 설정할 필요가 없습니다."* - 아, 이론과 실습의 차이점은 ... – jww

0

내가 사용했던 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"]) 
관련 문제