我目前正在编写一个使用GLib-2.0作为其数据结构的小程序。
我正在使用以下命令进行编译:
gcc -g -O3 -std=gnu99 -fPIC -shared -I/usr/local/java/jdk1.8.0_20/include \
-I/usr/local/java/jdk1.8.0_20/include/linux \
`pkg-config --cflags glib-2.0` `pkg-config --libs glib-2.0` \
-o runtimesamplingagent.so runtimesamplingagent.c
这没有问题。
然而,当我运行该程序时,我收到以下错误:
symbol lookup error: ./runtimesamplingagent.so: undefined symbol: g_node_new
这是什么原因?
我对C很新,但我猜它是某种链接问题。 可能是什么原因引起了什么?
我正在使用安装了libglib-2.0-dev的Ubuntu 14.04 LTS 64位机器。
答案 0 :(得分:2)
您已在build命令中包含了链接选项;问题是它在错误的地方。
您的命令如下所示:
gcc -g -O3 -std=gnu99 -fPIC -shared \
-I/usr/local/java/jdk1.8.0_20/include \
-I/usr/local/java/jdk1.8.0_20/include/linux \
`pkg-config --cflags glib-2.0` \
`pkg-config --libs glib-2.0` \ <<<
-o runtimesamplingagent.so \
runtimesamplingagent.c
在标有<<<
的那一行中,您已经指定了链接GLib所需的选项。唯一的问题是它在错误的地方。你应该把它放在.c文件之后的最后。
所以你的命令应该是这样的:
gcc -g -O3 -std=gnu99 -fPIC -shared \
-I/usr/local/java/jdk1.8.0_20/include \
-I/usr/local/java/jdk1.8.0_20/include/linux \
`pkg-config --cflags glib-2.0` \
-o runtimesamplingagent.so \
runtimesamplingagent.c \
`pkg-config --libs glib-2.0`