【问题标题】:gcc glib symbol lookup errorgcc glib 符号查找错误
【发布时间】:2015-05-01 11:39:30
【问题描述】:

我目前正在编写一个使用 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 很陌生,但我猜这是某种链接问题。 任何提示可能是什么原因?

我正在使用安装了 libglib-2.0-dev 的 Ubuntu 14.04 LTS 64 位机器。

【问题讨论】:

  • ldd yourprogram 的输出和LD_LIBRARY_PATH 的引用匹配吗?

标签: c gcc glib


【解决方案1】:

您已经在构建命令中包含了链接选项;问题是它在错误的地方。

您的命令如下所示:

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

在标有&lt;&lt;&lt; 的那一行中,您已经指定了链接 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`

【讨论】:

  • 绝对:库应该列在目标文件之后,而不是之前。话虽如此,但奇怪的是程序链接但未能运行,而不是链接失败。
  • 没错。我已经自我回答了,但我会除了你的。谢谢
【解决方案2】:

追加

 -lglib-2.0

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

【讨论】:

    猜你喜欢
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多