在编译使用图形库的基于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
)对结果没有影响。
我很茫然,据我所知,我希望解决符号并运行应用程序。任何人都有解释这里发生了什么,并建议如何解决这个问题>
答案 0 :(得分:0)
很可能你不会太高兴,因为我无法给你一个简明的答案,但我有完全相同的错误,实际上你的错误消息是我的搜索词(=未定义的符号:_ZNK18QAbstractListModel7siblingEiiRK11QModelIndex)。这就是我到达这里的方式。 因此,我的“解决方案”可能会为您提供解决问题的方法。
经过大量繁琐的追踪和错误之后,我意识到在发生此错误之前,CPU / GPU会立即上升。压力&超载,似乎是原因。因此,我缩小了屏幕分辨率并为GPU提供了更多RAM(这是在Raspberry Pi 2上)。 Etvoilà这个错误消失了。 换句话说,我收拾了骡子直到它可以继续下去。解决方案:减少负载。希望以某种方式有意义并使您更接近解决方案。 问候。