gcc glib符号查找错误

时间:2015-05-01 11:39:30

标签: c gcc glib

我目前正在编写一个使用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位机器。

1 个答案:

答案 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`