1

我一直在开发一个名为 RoboJournal 的程序,最近完成了 0.4.1 版本。我目前正在为 Fedora 打包它,但由于某种原因,该程序无法在该操作系统上编译。完全相同的代码可以在 Windows 和任何基于 Debian 的 Linux(Debian 本身、Ubuntu、Mint 等)上构建良好。我为 Debian 打包这个没有问题。这是编译器输出错误信息(在 Fedora 18 KDE 版本上运行):

/usr/bin/ld: dblogin.o: undefined reference to symbol 'XkbGetIndicatorState'
/usr/bin/ld: note: 'XkbGetIndicatorState' is defined in DSO /lib64/libX11.so.6 so try adding it to the linker command line
/lib64/libX11.so.6: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status

问题似乎是链接器找不到任何应该控制 XkbGetIndicatorState 信号(X11 库之一)的东西。这用于确定在某个对话框处于活动状态时是否启用大写锁定。显然,任何基于 Debian 的东西都包含这个库,而 Fedora 没有。我认为这个错误只是由缺少包引起的,但我不确定是哪个包。谷歌没有给我任何有用的东西。有任何想法吗?

任何想自己测试的人都可以从 git://github.com/pwizard2/robojournal.git 克隆。该应用程序依赖于以下软件包(到目前为止):qt、qt-assistant、qt-mysql、qt-devel、qt-webkit、qt-webkit-devel。

4

1 回答 1

2

问题可能是您没有链接您的程序,libX11因此您需要添加-lX11到您的链接命令,然后一切都会正常工作。

它适用于其他一些 linux 发行版的原因是它们允许使用仅间接引入的库来解析符号 - 因此,如果您的程序链接到链接的库,libX11那么您将能够在libX11.

Fedora 几年来一直不允许这种间接链接(默认情况下)(请参阅UnderstandingDSOLinkChange),其他几个发行版现在也纷纷效仿。

于 2013-04-26T08:00:44.067 回答