我一直致力于一个名为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。
答案 0 :(得分:2)
问题可能是您没有将您的计划与libX11
相关联,因此您需要在链接命令中添加-lX11
,然后一切正常。
它适用于其他一些Linux发行版的原因是它们允许使用仅间接引入的库来解析符号 - 所以如果你的程序链接到与libX11
链接的库,那么你将能够在libX11
中调用例程。
Fedora几年来一直没有允许这种间接链接(默认情况下)(参见UnderstandingDSOLinkChange),其他几个发行版也已经跟进。