我已经搜索了很多这个。并尝试了很多。只是不知道我哪里出错了。
这是我的代码,非常简单:
#include <glib.h>
int main()
{
int *ip=g_new(int,1);
*ip=42;
return *ip;
}
首先我在我的Ubuntu和Mint中尝试使用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
所以它不工作,然后我尝试从源代码编译并自己安装一个。 我已经得到了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
所以我需要一些帮助。谢谢!
更新: 后来我在RedHat中尝试使用较旧的gcc。它没关系。
答案 0 :(得分:0)
我在我的glib沙箱中有这个Makefile:
PKGS=glib-2.0
CFLAGS+=$(shell pkg-config --cflags $(PKGS))
LDFLAGS+=$(shell pkg-config --libs $(PKGS))
%: %.c
$(CC) $(CFLAGS) $< -o $@ $(LIBS) $(LDFLAGS)
%.o: %.c
$(CC) $(CFLAGS) $< -c -o $@
%: %.o
$(CC) $< -o $@ $(LIBS) $(LDFLAGS)
从此开始并进行调整,你应该能够找出准确的命令行并编译你的程序。
此外,您应该确保PKG_CONFIG_PATH已正确更新,以包含安装glib的路径(通常在PREFIX / lib / pkgconfig中)。
答案 1 :(得分:0)
Ubuntu 18.04在这里。即使在源.c
文件之后,我也必须将所有glib标志放在compile语句的末尾。这样编译就可以了:
gcc -Wall -o bfs bfs.c `pkg-config --cflags glib-2.0` `pkg-config --libs glib-2.0`
但这不是:
gcc -Wall -o bfs `pkg-config --cflags glib-2.0` `pkg-config --libs glib-2.0` bfs.c
/tmp/ccvWsLk3.o: In function `newGraph':
bfs.c:(.text+0x58): undefined reference to `g_hash_table_new'
collect2: error: ld returned 1 exit status
在我被告知将源文件放置在compile语句的末尾始终是一种很好的风格,这使我发疯了一段时间。 :p