【问题标题】:linking error. Perhaps a problem with ordering?链接错误。也许订购有问题?
【发布时间】:2020-03-28 15:46:04
【问题描述】:

我正在构建一个使用 GTK+3 和​​ pango 的程序。除了构建可执行文件的最后一位之外,它的大部分编译都很好。最后的命令是:

gcc -o z80sim main.c -Wall -Iz80 -Igui obj/disas.o obj/iosim.o obj/sim0.o obj/sim1.o obj/sim2.o obj/sim3.o obj/sim4.o obj/sim5.o obj/sim6.o obj/sim7.o obj/simctl.o obj/simfun.o obj/simglb.o obj/simint.o obj/callbacks.o obj/code.o obj/guiglb.o obj/memory.o obj/flags.o obj/log.o obj/ports.o obj/registers.o `pkg-config --cflags --libs gtk+-3.0`

但我收到此错误消息:

obj/sim1.o: In function `cpu':
sim1.c:(.text+0x2cb): undefined reference to `check_gui_break'
obj/callbacks.o: In function `on_open1_activate':
callbacks.c:(.text+0x20): undefined reference to `Get_File'
:
:

在 sim1.c 等中定义和调用 check_gui_break 的位置。

这与 ld 调用中目标文件和库的排序有关,但我尝试将 pkg-config 部分放在各个 .o 文件之前和之后,但它仍然给出相同的错误。

我已经阅读了非常丰富的https://eli.thegreenplace.net/2013/07/09/library-order-in-static-linking,但是,虽然我现在知道的更多了,但我仍然无法破解这个。

顺便说一句。

pkg-config --cflags --libs gtk+-3.0

给予

-pthread -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng16 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0

请好心人怜悯我,开导我?

【问题讨论】:

  • 'check_gui_break' 是在 sim1.c 中定义还是刚刚声明?
  • 如果您的代码类似于this,则check_gui_break 未在sim1.c 中定义。
  • 我正在使用的 sim1.c 的代码是:github.com/clancyj4/z80sim/blob/master/z80/sim1.c 自 2008 年合作以来,我还没有意识到 Udo 已经更新了 z80sim。

标签: c gcc pango


【解决方案1】:

看来我遇到的大多数错误都是从 Glade2 过渡到 Glade3 的结果。在 2 中,Glade 生成了一些我的代码中缺少的 C 代码。返回参考手册,了解如何对代码进行现代化改造。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    相关资源
    最近更新 更多