구성 / 메이크주기에 include 및 lib 경로를 추가하는 방법은 무엇입니까?


83

su 액세스 권한이없는 Linux 상자에 라이브러리를 설치할 장소가 필요합니다. ~ / local [/ bin, / lib, / include]를 사용하고 있지만 ./configure에서 라이브러리를 찾도록 어떻게 말할 수 있는지 모르겠습니다 (특히 libgif가 필요한 emacs를 컴파일하려고합니다). , 내 배포판에 오지 않음).

나는 추가를 시도했다

export PATH=$PATH:~/local/bin
export LD_LIBRARY_PATH=~/local/lib
export C_INCLUDE_PATH=~/local/include
export CPLUS_INCLUDE_PATH=~/local/include

.bashrc에 있지만 작동하지 않는 것 같습니다.


4
PATH를 제외하고는 시스템 기본 경로를 덮어 씁니다. 를 만들면 export C_INCLUDE_PATH=~/local/include:$C_INCLUDE_PATH컴파일러는 먼저에서 검색 ~/local/include하고 첫 번째 디렉토리에서 포함을 찾지 못한 경우에만 $ C_INCLUDE_PATH에서 검색 합니다.
Marc Plano-Lesay 2011 년

답변:


99

config.site 파일이 필요합니다. 시험:

$ mkdir -p ~ / 로컬 / 공유
$ cat << EOF> ~ / local / share / config.site
CPPFLAGS = -I $ HOME / local / include
LDFLAGS = -L $ HOME / local / lib
...
EOF

--prefix = $ HOME / local을 사용하여 autoconf 생성 구성 스크립트를 호출 할 때마다 config.site를 읽고 모든 할당이 수행됩니다. CPPFLAGS 및 LDFLAGS는 필요한 모든 것이지만 원하는 다른 할당도 할 수 있습니다 (따라서 위 샘플의 ...). -I 플래그는 CFLAGS가 아니라 CPPFLAGS에 속합니다. -I는 컴파일러가 아닌 전처리기를위한 것입니다.


윌리엄; 감사합니다. 공유 호스트에 구축 한 CPPFLAGS에 대한 조언입니다. 귀하의 메모로 인해 오늘 실패한 ./configure 실행으로 많은 스 래싱을 절약했습니다.
Brian Tiffin

30

make를 실행할 때 LDFLAGS 및 CFLAGS를 설정합니다.

$ LDFLAGS="-L/home/me/local/lib" CFLAGS="-I/home/me/local/include" make

엄청난 시간 동안 그렇게하고 싶지 않다면 .bashrc (또는 셸에 해당하는)로 내보내십시오. 또한 LD_LIBRARY_PATH를 / home / me / local / lib를 포함하도록 설정합니다.

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/me/local/lib

.bashrc ./configure에 LDFLAGS 및 CFLAGS를 추가 할 때 configure가 실패합니다. 오류 : C 컴파일러는 실행 파일을 만들 수 없습니다 ...
Lacrymology

아마도 구성 테스트 코드 컴파일러 매개 변수를 재정의하고있을 것입니다. make env 프리 페치를 사용하십시오. 또한 configure에 libgif를 재정의하는 옵션이 없는지 확인하십시오. autotools 스크립트가 제대로 만들어지면 libgif가 설치된 경로를 지정할 수 있습니다 (예 : 기본 라이브러리 위치 재정의). 그것이 더 깨끗한 해결책이 될 것입니다.
long404

동일한 차이점 .. tneme @ ws16lab07 : ~ / Descargas / emacs-23.3 $ LDFLAGS = "-L / home / tneme / local / lib"CFLAGS = "-l / home / tneme / local / include"./configure --prefix = "/ home / tneme / local"빌드 시스템 유형 확인 중 ... i686-pc-linux-gnu 호스트 시스템 유형 확인 중 ... i686-pc-linux-gnu gcc 확인 중 ... gcc C 컴파일러 작동 여부 확인 ... no configure : error : in /home/tneme/Descargas/emacs-23.3': configure: error: C compiler cannot create executables See config.log 'for more details t
Lacrymology

이것들은 "구성"할 때가 아니라 "만들"때 정의되어야합니다.
long404

방금 emacs 23 구성을 시도했지만 그 문제가 발생하지 않았습니다. LDFLAGS = "-L / home / me / local / lib"CFLAGS = "-I / home / me / local / include"./configure 확인 빌드 시스템 유형 ... x86_64-unknown-linux-gnu 호스트 시스템 유형 검사 ... x86_64-unknown-linux-gnu gcc 검사 ... gcc C 컴파일러 기본 출력 파일 이름 검사 ... a.out C 여부 검사 컴파일러 작동 ... 예 크로스 컴파일 여부 확인 ... 실행 파일 접미사 확인 안 함 ... 객체 파일 접미사 확인 ... o GNU C 컴파일러 사용 여부 확인 ... 예
long404

8

제대로하는 데 시간이 걸렸습니다. ARM 타겟을 위해 Ubuntu에서 크로스 컴파일 할 때이 문제가 발생했습니다. 나는 그것을 다음과 같이 해결했다.

PATH=$PATH:/ccpath/bin CC=ccname-gcc AR=ccname-ar LD=ccname-ld CPPFLAGS="-nostdinc -I/ccrootfs/usr/include ..." LDFLAGS=-L/ccrootfs/usr/lib ./autogen.sh --build=`config.guess` --host=armv5tejl-unknown-linux-gnueabihf

CFLAGS는 autogen.sh/configure와 함께 사용되지 않습니다.이를 사용하면 "configure : error : C compiler cannot create executables"오류가 발생했습니다. 빌드 환경에서 autogen.sh 스크립트를 사용하고 있었는데, autogen.sh 스크립트가없는 경우 위 명령에서 ./autogen.sh를 ./configure로 대체했습니다. --host 매개 변수를 얻기 위해 대상 시스템에서 config.guess를 실행했습니다.

autogen.sh/configure를 성공적으로 실행 한 후 다음으로 컴파일하십시오.

PATH=$PATH:/ccpath/bin CC=ccname-gcc AR=ccname-ar LD=ccname-ld CPPFLAGS="-nostdinc -I/ccrootfs/usr/include ..." LDFLAGS=-L/ccrootfs/usr/lib CFLAGS="-march=... -mcpu=... etc." make

내가 사용하기로 선택한 CFLAGS는 "-march = armv5te -fno-tree-vectorize -mthumb-interwork -mcpu = arm926ej-s"입니다. 모든 include 디렉토리를 올바르게 설정하는 데 시간이 걸립니다. 일부 include는 크로스 컴파일러를 가리키고 일부는 루트 파일 시스템 include를 가리키고 일부는 충돌이있을 수 있습니다.

나는 이것이 완벽한 대답이 아니라고 확신합니다. 그리고 여전히 Makefile에서 / ccrootfs가 아닌 /를 가리키는 일부 include 디렉토리가 보입니다. 이 문제를 해결하는 방법을 알고 싶습니다. 이것이 누군가를 돕기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.