2009-07-17 7 views
41

그래서 여기에 세계의 간단한 입심 프로그램 :왜 glib을위한 "안녕하세요 세상"을 만들 수 없습니까?

#include <glib.h> 

내가 gcc test.c으로 컴파일하려고 내가 얻을 :

# dpkg -l | grep libglib 
ii libglib-perl        1:1.183-1        Perl interface to the GLib and GObject libra 
ii libglib1.2-dev       1.2.10-19build1       The GLib library of C routines (development) 
ii libglib1.2ldbl       1.2.10-19build1       The GLib library of C routines 
ii libglib2.0-0        2.20.1-0ubuntu2       The GLib library of C routines 
ii libglib2.0-cil       2.12.1-1ubuntu2       CLI binding for the GLib utility library 2.1 
ii libglib2.0-data       2.18.2-0ubuntu2       Common files for GLib library 
ii libglib2.0-dev       2.20.1-0ubuntu2       Development files for the GLib library 
ii libglibmm-2.4-1c2a      2.18.1-1        C++ wrapper for the GLib toolkit (shared lib 
:
test.c:1:18: error: glib.h: No such file or directory 

그래서 내가 올바른 패키지가 있는지 확인

그런 다음/usr/include 아래의 "glib.h"를 검색합니다. 두 가지 /usr/include/glib-1.2/glib.h와 /usr/include/glib-2.0/glib.h가 있습니다. 그래서 시도 :

$ gcc -I/usr/include/glib-2.0 -Wall test.c 
In file included from /usr/include/glib-2.0/glib/galloca.h:34, 
      from /usr/include/glib-2.0/glib.h:32, 
      from test.c:2: 
/usr/include/glib-2.0/glib/gtypes.h:34:24: error: glibconfig.h: No such file or directory 

(냈다 10,000 이상의 오류)

을 난 아무데도 내 컴퓨터에 glibconfig.h없는 것 같습니다.

지금 어떻게해야합니까?

+1

어쩌면 난 그냥 바보되고있어 P, 그런데 왜 당신은 헤더를 컴파일하려고 :

은 .. 나중에 내게 감사? – GManNickG

+14

좀 더 복잡한 프로그램으로 시작했는데 "#include "이 작동하지 않으면 아무 것도하지 않습니다. – mike

+0

주 기능이 없으면 * 작동하지 않습니다 *. 'glib.h'를'stdio.h '로 바꾸는 것도 효과가 없습니다. 주 기능이 있다고 가정 할 때, 정답은 다른 대답에서 언급 한'pkg-config'를 사용하는 것입니다. –

답변

49

glib는 숨기는 경향이 있습니다 ... GCC가 자동으로 하위 디렉토리를 검색하지 않으므로 include 문이 작동하지 않으므로 glib-1.2 또는 glib-2.0의 glib.h를 볼 수 없습니다.

GLIB 설명서의 Compiling GLib Applications 페이지를 읽으십시오 ... pkg-config --cflags glib-2.0과 같은 명령을 사용하여 GCC에 적합한 플래그를 얻으십시오.

당신이하려고하는 일을 할 수있는 표준 방법은

% gcc test.c -Wall -o test `pkg-config --cflags --libs glib-2.0` 

참고 "제자리"는 PKG-config 명령을 실행하는 쉘에게 백 틱입니다.

+3

이것은 숨어 있지 않습니다. glibconfig.h는 아치 종속 데이터 목록이므로/usr/include와는 관련이 없습니다. 이것은 일반적으로/usr/lib/glib2/... 아래에 있습니다. – ntd

+0

[This] (http://askubuntu.com/a/90342)는 저에게 효과적이었습니다. – gkiko

-2

apt-get build-dep은 친구입니다. 아무도 만들지 않은 패키지를 모두 기억할 수 있습니다.

+2

파일이있는 것이 확실하므로 데비안 관련 패키지 관리 명령으로 문제를 해결할 수 없습니다. 'pkg-config'를 올바르게 사용하면됩니다. – mlibby

40
> > The canonical way to do what you are trying is 

> % gcc test.c -Wall -o test `pkg-config --cflags --libs glib-2.0` 

죄송합니다. 이는 일반적인 오해입니다. ELF 기반 시스템, 특히 Linux의 경우 대부분의 경우에만 작동합니다. 정식 방법은 다음과 같이 명령 행에서 정확하고 기존의 위치에 별도로 CFLAGS 및 라이브러리에 전달하는 것입니다 :

gcc -Wall -o test `pkg-config --cflags glib-2.0` test.c `pkg-config --libs glib-2.0` 

그것은 PKG-설정이 --cflags 모두를 받아들이는 유감입니다 - -libs 옵션을 동시에 사용하는 것은 잘못된 meme이 절대로 죽지 않을 것이므로 Linux에서 익숙한 사람들은 다른 플랫폼에서 동일하게 시도 할 때 계속 당황 할 것입니다. @ 크리스으로

+1

+1 용감성! 엄밀히 말하면 소스 코드 파일의 이름은 모든 옵션 뒤에 끝나야합니다. –

+6

미안하지만 그건 사실이 아닙니다. MinGW와 같은 일부 비 Linux 플랫폼에서 실제로 그렇게 해 보았습니까? 예를 들어 http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html에서 "이 옵션을 쓰는 명령에서 링커가 라이브러리와 개체 파일을 검색하고 처리하는 부분이 달라집니다. 따라서'foo.o -lz bar.o '는 foo.o 파일 다음에 bar.o 앞에있는 라이브러리'z'를 검색한다. bar.o가'z '에있는 함수를 참조하면, 그 함수는 로드되지 않습니다 ". – tml

7

말했다 사용 PKG-설정

glibconfig.h is missing 

이 파일이 /usr/include/glib-2.0에없는 있기 때문에,하지만 /usr/lib/glib-2.0.에 그래서 당신은이 /usr/lib 경로를 포함하도록하거나 파일을 포함 복사/입심 - 2.0

0

나는 잘은 모든 glib.h 프로그램 :

gcc pkg-config --cflags --libs glib-2.0 filename.c

를 컴파일이 작업을 수행 로 glib.h 사용하고 있습니다

pkg-config --cflags --libs glib-2를 둘러싸도록하십시오.0을 역 인용 부호로 붙인 (물결 모양의 키보드에서 가장 왼쪽에있는 키)을 찾을 수 있습니다.

+0

코드에 "'"을 넣는 것이 좋습니다. 그건 내가 언젠가 혼란 스러웠다. 나머지 답변을 읽지 못해서 내 잘못을 인정했지만 코드 스 니펫은 정확하지 않습니다. – ALM

+0

이런. 나는 그것을 놓쳤다. .. –

관련 문제