链接(加载?)错误与QT应用程序

时间:2016-04-29 20:26:37

标签: c++ qt

在编译使用图形库的基于QT的示例应用程序之后,当我尝试运行该应用程序时出现此错误:

./basic_dyn 
./basic_dyn: symbol lookup error: /qanava-0.4/lib/libqanava.so.0.4.0: undefined symbol: _ZNK18QAbstractListModel7siblingEiiRK11QModelIndex

过去,我发现这些错误来自于未能在适当的库中链接。因此,看看错误来自图形库,我快速检查了库中的名称:

nm libqanava.so.0.4.0 | grep QAbstractListModel
    U _ZN18QAbstractListModel11qt_metacallEN11QMetaObject4CallEiPPv
    U _ZN18QAbstractListModel11qt_metacastEPKc
    [[ .... several list of output removed ....]]
    U _ZNK18QAbstractListModel6parentERK11QModelIndex
    U _ZNK18QAbstractListModel7siblingEiiRK11QModelIndex
    U _ZTI18QAbstractListModel

我们可以从中看到违规函数(_ZNK18QAbstractListModel7siblingEiiRK11QModelIndex)确实存在于库中。重复名称提取,这次打开名称demangling,给出;

nm -C libqanava.so.0.4.0 | grep QAbstractListModel
    U QAbstractListModel::qt_metacall(QMetaObject::Call, int, void**)
    U QAbstractListModel::qt_metacast(char const*)
    [[ .... several lines removed .... ]]
    U QAbstractListModel::parent(QModelIndex const&) const
    U QAbstractListModel::sibling(int, int, QModelIndex const&) const
    U typeinfo for QAbstractListModel

所以,我们可以看到该函数是QAbstractListModel::sibling。参考QT文档,该类似乎是Qt5Core库的一部分。事实上,从Qt5Core查看导出的函数,我们发现:

nm -C libQt5Core.so.5.5.1 | grep QAbstractListModel
  0000000000503a40 r qt_meta_data_QAbstractListModel
     [[ .... many lines deleted .... ]]
  00000000002257c0 T QAbstractListModel::parent(QModelIndex const&) const
  00000000002257f0 T QAbstractListModel::sibling(int, int, QModelIndex const&) const
  000000000059f850 V typeinfo for QAbstractListModel

因此,从Qt5Core导出了offening功能。并且,我希望定义符号。

应用程序编译为,我们可以看到libQt5Core链接在:

g++ moc_canMainWindow.o canApp.o canMainWindow.o -L/usr/X11R6/lib -L/opt /qt5/lib 
-L../../lib -lQt5Gui -lQt5Xml -lQt5Core -lQt5Widgets -lqanava -lpng -lfreetype -lSM 
-lICE   -lXext -lX11  -lz -lm -pthread  -lrt -ldl -o basic_dyn

所以,适当的QT库在命令行上,我本来期望这些符号已被解析。在命令行上更改库的顺序(更改为-lqanava -lQt5Gui -lQt5Xml -lQt5Core -lQt5Widgets)对结果没有影响。

我很茫然,据我所知,我希望解决符号并运行应用程序。任何人都有解释这里发生了什么,并建议如何解决这个问题>

1 个答案:

答案 0 :(得分:0)

很可能你不会太高兴,因为我无法给你一个简明的答案,但我有完全相同的错误,实际上你的错误消息是我的搜索词(=未定义的符号:_ZNK18QAbstractListModel7siblingEiiRK11QModelIndex)。这就是我到达这里的方式。 因此,我的“解决方案”可能会为您提供解决问题的方法。

经过大量繁琐的追踪和错误之后,我意识到在发生此错误之前,CPU / GPU会立即上升。压力&超载,似乎是原因。因此,我缩小了屏幕分辨率并为GPU提供了更多RAM(这是在Raspberry Pi 2上)。 Etvoilà这个错误消失了。 换句话说,我收拾了骡子直到它可以继续下去。解决方案:减少负载。希望以某种方式有意义并使您更接近解决方案。 问候。