为什么运行时在库中找不到某些符号/配置



我正在尝试从源代码安装8086模拟器。我运行./configure并在输出中看到以下警告:

checking for g_signal_emit in -lgtk-x11-2.0... no
configure: WARNING: Without GTK there will be no GTK-GUI of i8086emu!
checking for XkbGetMap in -lgdk-x11-2.0... no
configure: WARNING: Without GTK there will be no GTK-GUI of i8086emu!
checking for g_malloc in -latk-1.0... no
configure: WARNING: Without ATK there will be no GTK-GUI of i8086emu!
checking for g_log in -lgdk_pixbuf-2.0... no
configure: WARNING: Without GTK there will be no GTK-GUI of i8086emu!

是什么原因导致的?这是否意味着我的图书馆版本不对?或者应该使用其他配置重新编译库?如果我遇到这种问题,我该怎么办?

UPD:g_signal_emit符号不属于-lgtk-x11-2.0,而是属于-lgobject-2.0。如果我运行:

env LIBS='-lgobject-2.0' ./configure

那么我有

checking for g_signal_emit in -lgtk-x11-2.0... yes

情况变得更加令人困惑。

是什么原因导致的?

由项目开发人员提供的实际警告消息比"检查…"消息更清楚,"检查

这些检查的目的实际上并不是定位特定的符号。这只是检查链接器是否可以定位特定库的一种方法。Autoconf试图让链接器解析的符号由项目开发人员选择,它应该是所需库的特征。

检查失败意味着链接器没有找到有问题的库,或者它们不包含指定的符号。前者要常见得多。后者可能是由一个简单的错误引起的,或者是因为链接器选择了错误的库或错误的版本。也有可能发现库的不可用版本(错误的体系结构、不可访问…(,这两者都有。

当这些检查失败时,项目开发人员似乎选择了发出额外的消息,显然是因为仍然可以构建软件,但你会得到一个功能降低的版本。

这是否意味着我有错误版本的库?或者应该使用其他配置重新编译库?

正如我已经描述的,有多种可能性。configure脚本将在构建目录中编写一个日志文件,该文件提供了关于它到底尝试了什么以及如何失败的更多详细信息,并带有错误消息。有关详细信息,您应该查阅该日志。

如果我遇到这种问题,我该怎么办?

首先调用并阅读配置帮助:

./configure --help

其中大部分都是样板文件,但它可能描述了可以传递给configure以解决这种情况的相关选项。

您也可以在项目文档中找到有用的信息。覆盖范围和质量差异很大,但通常文档会告诉您需要哪个版本的第三方库。

您还可以查阅配置日志,以了解失败检查的详细信息。

你通过这些方式收集到的信息必须指导你如何从那里开始。解决方案可能是安装额外的库或将适当的参数传递给configure,但在某些情况下,您需要更新和重建项目的构建系统,也许还需要更新和重新构建它的源代码来处理您的环境。

一些简单案例的提示:

  • 构建库与安装不是一回事。链接器通常找不到未安装的库
  • 在有区别的系统上,您需要有问题的库的开发包。在这样的系统上,运行时包通常是不够的
  • 确保你有正确的图书馆风格。我偶尔会把头撞到墙上,试图找出为什么configure似乎看不到我可以证明的库安装了,最终发现我有错误的库体系结构(32位与64位(
  • 有些软件包反常地将其库安装在链接器的标准搜索路径之外。此类包的恶意客户端通常提供一种通过命令行参数将路径传递给configure的方法,但如果没有,则可以使用LDFLAGS环境变量,例如

    LDFLAGS="-L/path/to/libfoo.d" ./configure
    

相关内容

  • 没有找到相关文章

最新更新