구성 / 메이크주기에 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.