2017-03-29 3 views
0

전 이것에 대해 많이 조사했습니다. 그리고 많이 시도했습니다. 내가 잘못 된 곳을 모른다. 여기 우분투에서 glib를 사용할 때 정의되지 않은 참조가 발생했습니다

은 매우 간단합니다, 내 코드입니다 :

#include <glib.h> 
int main() 
{ 
    int *ip=g_new(int,1); 
    *ip=42; 
    return *ip; 
} 

우선 시도 apt-get을 컴파일, 내 우분투와 당신이 일을 끝낼 민트에 libglib2.0-dev에 :

gcc `pkg-config --cflags --libs glib-2.0` -o main main.c 
/tmp/ccYFljQD.o: In function `main': 
main.c:(.text+0x13): undefined reference to `g_malloc_n' 
collect2: error: ld returned 1 exit status 
Makefile:3: recipe for target 'all' failed 
make: *** [all] Error 1 

그리고 PKG-설정의 출력 :

$ pkg-config --cflags --libs glib-2.0 
-I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -lglib-2.0 

그래서이 작동하지 않습니다, 그럼 나는 소스에서 컴파일하고 m에 의해 하나를 설치하려고 나 자신. 필자는 libffi-dev, autogen 및 configure, make, make install을 모두 해봤지만 괜찮습니다.

$ pkg-config --cflags --libs glib-2.0 
-I/home/donpope/software/include/glib-2.0 -I/home/donpope/software/lib/glib-2.0/include -L/home/donpope/software/lib -lglib-2.0 

는 그러나 같은 오류 컴파일 :
gcc `pkg-config --cflags --libs glib-2.0` -o main main.c 
/tmp/cctR3iEq.o: In function `main': 
main.c:(.text+0x13): undefined reference to `g_malloc_n' 
collect2: error: ld returned 1 exit status 
Makefile:3: recipe for target 'all' failed 
make: *** [all] Error 1 

그래서 내가 여기에 몇 가지 도움이 필요합니다. 고맙습니다!

업데이트 : 나중에 나는 구형 gcc가있는 RedHat에서 이것을 시도합니다. 그리고 그것은 단지 괜찮습니다.

+1

'pkg-config --cflags --libs'를 사용하지 마십시오. 컴파일러 플래그와 링커 플래그는 위치 적입니다. '--cflags'와'--libs'를 나눠서 cflags와 libs를 먼저 얻습니다. – ebassi

답변

0

나는 나의 입심 샌드 박스에서이 Makefile을 가지고 : 이것과의 조정에서 시작

PKGS=glib-2.0 
CFLAGS+=$(shell pkg-config --cflags $(PKGS)) 
LDFLAGS+=$(shell pkg-config --libs $(PKGS)) 

%: %.c 
    $(CC) $(CFLAGS) $< -o [email protected] $(LIBS) $(LDFLAGS) 

%.o: %.c 
    $(CC) $(CFLAGS) $< -c -o [email protected] 

%: %.o 
    $(CC) $< -o [email protected] $(LIBS) $(LDFLAGS) 

, 당신이 정확한 커맨드를 파악하고 프로그램을 컴파일 할 수 있어야한다.

또한 PKG_CONFIG_PATH가 glib를 설치 한 경로 (일반적으로 PREFIX/lib/pkgconfig에 있음)를 포함하도록 올바르게 업데이트되었는지 확인해야합니다.

+0

마지막으로 -lglib-2.0을 넣으면 괜찮습니다. 고맙습니다! – TangXC

관련 문제