configure、pkg-config、pkg_config_path 삼자 관계
학습 ┊ 업무 관련 Mar 8th, 2010 easylife
configure
원본 코드를 설치하는 과정에서 대부분configure 프로그램을 사용합니다. 일반적인 configure는 하나의script입니다. 실행할 때 필요한 파라미터를 보내서 설정 항목을 알릴 수 있습니다.
configure 프로그램은 전송된 설정 항목 검사 프로그램이 컴파일할 때 의존하는 환경과 프로그램 컴파일링 설치에 따라 설정을 하고 컴파일링에 필요한 Makefile 파일을 생성하여 프로그램 Make가 읽어들여 사용하고 관련 컴파일러 (일반적으로 컴파일러는 gcc) 를 호출하여 최종 바이너리 프로그램을 컴파일합니다.한편, configure 스크립트는 상응하는 의존 환경을 검사할 때(예: 의존 소프트웨어의 버전, 상응하는 라이브러리 버전 등) pkg-config의 도구를 통해 상응하는 의존 환경을 검사한다.
pkg-config
1. pkg-config 소개
pkg-config는 시스템에 설치된 라이브러리 파일의 정보를 검색하는 데 사용됩니다.전형적인 것은 라이브러리의 컴파일링과 연결에 쓰인다.Makefile의 경우:
?[Copy to clipboard]
View Code BASH
1
2
3
program: program.c
cc program.c `pkg-config --cflags --libs gnomeui`
2, pkg-config 기능
일반적으로 라이브러리의 헤더 파일이/usr/include 디렉터리에 없으면 컴파일할 때 - I 인자로 경로를 지정해야 합니다.같은 라이브러리가 다른 시스템에서 다른 디렉터리에 있을 수 있고 사용자가 라이브러리를 설치할 때도 라이브러리를 다른 디렉터리에 설치할 수 있기 때문에 같은 라이브러리를 사용하더라도 라이브러리의 경로가 다르기 때문에 - I 파라미터로 지정한 헤더 파일의 경로와 연결할 때 - L 파라미터로lib 라이브러리를 지정하는 경로가 다를 수 있다. 그 결과는 컴파일 명령 인터페이스의 불통일을 초래한 것이다.컴파일링, 연결이 일치하지 않아서 같은 프로그램이 한 기계에서 다른 기계로 이동할 때 문제가 발생할 수 있습니다.
pkg-config는 컴파일 연결 인터페이스의 통일되지 않은 문제를 해결하는 도구입니다.
그것의 기본 사상: pkg-config는 라이브러리를 통해 제공되는 것이다.버전 정보, 컴파일, 연결에 필요한 매개 변수 등 라이브러리에서 필요한 정보를 얻을 수 있습니다.필요할 때 pkg-config에서 제공하는 매개 변수(-cflags, -libs)를 통해 필요한 정보를 추출하여 컴파일링과 연결에 사용할 수 있습니다.이렇게 하면 라이브러리 파일이 어디에 설치되어 있든지 간에 라이브러리를 통해 대응한다.pc파일은 정확하게 위치를 정할 수 있고 같은 컴파일링과 연결 명령을 사용하여 컴파일링과 연결 인터페이스를 통일시킬 수 있다.
주요 기능은 다음과 같습니다.
<1> 라이브러리의 버전 번호를 확인합니다.필요한 라이브러리의 버전이 요구에 부합되지 않으면 오류 정보를 출력하여 오류 버전의 라이브러리 파일을 연결하지 않도록 합니다.<2> 매크로 정의와 같은 헤더 파일의 경로를 컴파일합니다.<3> 라이브러리와 의존하는 다른 라이브러리의 위치, 파일 이름 및 기타 연결 매개 변수를 컴파일합니다.<4> 의존하는 다른 라이브러리의 설정에 자동으로 가입합니다.
3,glib-2.0의.pc 파일 내용은 기본적으로 pkg-config를 지원하는 라이브러리마다 대응합니다.pc 파일은 설치 후 설치 디렉터리의lib/pkgconfig 디렉터리에 있습니다.예를 들어, 우리는 위에서 Glib를/opt/gtk 디렉터리에 설치했습니다. 그러면 이 Glib 라이브러리에 대응하는 것입니다.pc 파일은/opt/gtk/lib/pkgconfig 디렉터리입니다. 다음은glib-2.0입니다.pc 파일:
?[Copy to clipboard]
View Code BASH
1
2
3
4
5
6
7
8
9
10
11
12
13
14
prefix=/opt/gtk/
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums
Name: GLib
Description: C Utility Library
Version: 2.12.13
Libs: -L${libdir} -lglib-2.0
Cflags: -I${includedir}/glib-2.0 -I${libdir}/glib-2.0/include
pkg-config –list-all
사용할 수 있는 모든 패키지를 보여줍니다. 위치는/usr/lib/pkgconfig입니다. 이 디렉터리에는 여러 가지가 있습니다.pc 파일./usr/local/lib/pkgconfig 아래의libname.pc파일, 새 소프트웨어는 일반적으로 모두 설치할 것이다.pc 파일, 직접 만들 수 없음 및 환경 변수 설정 PKGCONFIG_PATH 찾기.pc 파일 경로.pkg-config의 -cflags 파라미터를 사용하면 컴파일할 때 필요한 옵션을 제공할 수 있고,libs 파라미터는 연결할 때의 옵션을 제공할 수 있습니다.예를 들어, Sample을 가정합니다.c의 프로그램은 Glib 라이브러리를 사용하여 다음과 같이 컴파일할 수 있습니다.
?[Copy to clipboard]
View Code BASH
1
$ gcc -c `pkg-config --cflags glib-2.0` sample.c
이렇게 연결합니다.
?[Copy to clipboard]
View Code BASH
1
$ gcc sample.o -o sample `pkg-config --libs glib-2.0`
또는 위의 두 단계를 다음 단계로 결합할 수도 있습니다.
?[Copy to clipboard]
View Code BASH
1
$ gcc sample.c -o sample `pkg-config --cflags --libs glib-2.0`
보시다시피 pkg-config 도구를 사용하여 라이브러리의 옵션을 얻었기 때문에 라이브러리가 어떤 디렉터리에 설치되어 있든지 같은 컴파일링과 연결 명령을 사용할 수 있어 컴파일링과 연결 인터페이스의 통일을 가져왔습니다.
pkg-config 도구를 사용하여 라이브러리의 컴파일링과 연결 매개 변수를 추출하는 데는 두 가지 기본적인 전제 조건이 있습니다.
<1> 라이브러리 자체는 설치할 때 상응하는 것을 제공해야 합니다.pc 파일.이렇게 하지 않는 라이브러리 설명은 pkg-config 도구의 사용을 지원하지 않습니다.<2> pkg-config는 어디로 가야 하는지 알아야 합니다.pc 파일.
4. 환경 변수 PKGCONFIG_PATH
환경 변수 PKGCONFIG_PATH는 설정에 사용됩니다.pc파일의 검색 경로의pkg-config는 지정한 경로를 찾을 때까지 설정 경로의 선후 순서에 따라 검색합니다.pc파일까지.이렇게 하면 라이브러리의 헤더 파일의 검색 경로 설정이 사실상 옳게 변한다.pc 파일 검색 경로 설정
필요한 라이브러리를 설치한 후, 예를 들어Glib는 하나는 상응하는 것이다.pc 파일, 예를 들어glib-2.0.pc를/usr/lib/pkgconfig 디렉토리로 복사하고, 두 번째는 환경 변수 PKG 설정을 통해 복사CONFIG_PATH에 glib-2.0을 추가합니다.pc 파일의 검색 경로입니다.
환경 변수 PKG 추가CONFIG_PATH, bash에서 다음과 같은 설정을 해야 합니다.
?[Copy to clipboard]
View Code BASH
1
$ export PKG_CONFIG_PATH=/opt/gtk/lib/pkgconfig:$PKG_CONFIG_PATH
다음 명령을 실행하여/opt/gtk/lib/pkgconfig 경로가 PKG 에 설정되어 있는지 확인할 수 있습니다CONFIG_PATH 환경 변수:
?[Copy to clipboard]
View Code BASH
1
$ echo $PKG_CONFIG_PATH
이렇게 설정한 후 Glib 라이브러리의 다른 프로그램이나 라이브러리를 사용하여 컴파일할 때 Pkg-config는/opt/gtk/lib/pkgconfig라는 디렉터리에서glib-2.0을 찾아야 한다는 것을 알 수 있습니다.pc (GTK+와 기타 의존 라이브러리의.pc 파일도 여기에 복사되고, 우선 여기에 대응하는.pc 파일을 검색합니다.)이후 pkg-config를 통해 라이브러리의 컴파일링과 연결 파라미터를 추출하여 프로그램이 컴파일링과 연결할 때 사용할 수 있습니다.
또한 주의해야 할 것은 환경 변수의 설정은 현재 터미널 창에만 유효하다는 것이다.상기 설정이 없는 터미널 창에 도착하면 pkg-config는 새로 설치된glib-2.0을 찾을 수 없습니다.pc 파일로 인해 뒤에 설치된 설치(예를 들어 Glib 이후의 Atk 설치)를 할 수 없습니다.
우리가 채택한 설치 방안에서 환경 변수를 사용하여 GTK+와 그 의존 라이브러리에 대한 설정이기 때문에 시스템이 다시 시작하거나 터미널 창을 새로 연 후에 새로 설치된 GTK+ 라이브러리를 사용하려면 위와 같이 PKG 를 다시 설정해야 한다CONFIG_PATH 및 LDLIBRARY_PATH 환경 변수.
이런 GTK+를 사용하는 방법은 사용하기 전에 라이브러리를 설정하는 과정이 하나 더 생겼다.조금 번거로워 보이지만 GTK+ 라이브러리를 가장 안전하게 사용하는 방식으로 시스템에 이미 존재하는 GTK+ 라이브러리를 사용한 프로그램(예를 들어 GNOME 데스크톱)에 어떠한 충격도 주지 않는다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
execl 컴파일 시 경고:warning: not enough variable arguments to fit a sentinel 설명 (전재)warning: missing sentinel in function call warning: not enough variable arguments to fit a sentinel Sentinels & warnings...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.