gcc glib 符号查找错误

gcc glib symbol lookup error

我目前正在编写一个使用 GLib-2.0 作为其数据结构的小 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` `pkg-config --libs glib-2.0` \
    -o runtimesamplingagent.so runtimesamplingagent.c

这没有问题。

但是,当我 运行 程序时,出现以下错误:

 symbol lookup error: ./runtimesamplingagent.so: undefined symbol: g_node_new

这是什么原因?

我是 C 的新手,但我猜这是某种链接问题。 任何提示可能是什么原因造成的?

我正在 Ubuntu 14.04 LTS 64 位机器上工作,安装了 libglib-2.0-dev。

追加

 -lglib-2.0

到构建命令的末尾,修复它。

您已经在构建命令中包含了 linking 选项;问题是放错地方了。

您的命令如下所示:

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

在标有 <<< 的行中,您已经指定了 link 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`