我正在尝试从源代码安装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