2017-03-29 1 views
0

私はこれについてたくさん検索しました。そして、たくさん試しました。ちょうど私が間違っているか分からない。ここでubuntuでglibを使用すると未定義の参照になりました

が私のコードで、それは非常に簡単です:

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

まず私がコンパイルし、それが終了したとき、私のUbuntuとミントで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-config設定の出力:

$ 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で1をインストールしようとし、その後、働いていませんあなた自身。 私はapt-get 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で試してみます。それは大丈夫です。私はglibのサンドボックスでこのMakefileを持って

+1

'pkg-config --cflags --libs'を使わないでください:コンパイラフラグとリンカフラグは定位置です。 '--cflags'と' --libs'を分割し、最初にcflagsを、その後にlibsを取得します。 – ebassi

答えて

0

これと微調整から始め
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が(通常はPREFIX/lib/pkgconfigに)glibをインストールしたパスを含むように正しく更新されていることを確認する必要があります。

+0

最後に-lglib-2.0を置いても大丈夫です。ありがとうございました! – TangXC