我的C++应用程序代码在目录A中,我的共享库源代码在目录B中。我正在使用g++进行构建。我为每个编译步骤指定"-g-O0"标志,而不指定"-s"。我从应用程序目录A启动gdb,可以在目录A中列出应用程序源。当我试图在共享库中列出C++源文件时:
(gdb(列表MBQuickItem.cpp:0没有名为MBQuickItem.chp.的源文件
然后我将目录B的相对路径添加到源搜索路径:
(gdb(目录/搜索的Bi/Source目录:/home/orelilly/A//Bi:$cdir:$cwd
gdb在我输入'B'时完成路径完成,所以gdb清楚地"知道"这个目录。但是仍然找不到源文件:
(gdb(list MBQuickItem.cpp:0没有名为MBQuickItem.chpp的源文件。(gdb(列表/B/MBQuickItem.cpp:0没有命名的源文件../B/MBQuickItem.cpp.
MBQuickItem.cpp肯定存在于目录B中。我做错了什么?
(目录名实际上不是"A"one_answers"B"——只是简化了一些…(
我用g++构建(Ubuntu 7.5.0-3ubuntu1~18.04(7.5.0我在Ubuntu 18.04.3上运行GNU gdb(Ubuntu 8.1-0ubuntu3.2(8.1.0.20180409-git。
以下是用于构建共享库的命令(部分列表(:
g++-c-g-管道-O0-std=gnu++11-墙-Wextra-D_REENTRANT-fPIC-DMBGUI_LIBRARY-DQT_depleted_WARNINGS-DQT_NO-DEBUG-DQT_QUICK_LIB-DQT_GUI_LIB-DQT_QMLMODELS_LIB-DQT_QML_LIB-DQT_NETWORK_LIB-DQT_CORE_LIB-I-I../../../Qt/5.14.2/gcc_64/include-I./../..//Qt/5.14.2/gcc_64/include/QtQuick-I../../..//Qt/5.14.2/gcc_64/include/QtGui-I./../..//Qt/5.14.2/gcc_64/include/QtQml型号-I./../..//Qt/5.14.2/gcc_64/include/QtQml-I./../..//Qt/5.14.2/gcc_64/include/Qt网络-I./../..//Qt/5.14.2/gcc_64/include/QtCore-I-isystem/usr/include/libdrm-I./../..//Qt/5.14.2/gcc_64/mkspecs/linux-g++-o MBQuickItem.o MBQuickItem.cpp
[…]g++-g-Wl,-O1-Wl,-rpath,/home/orelilly/Qt/5.14.2/gcc_64/lib-共享-Wl,-soname,libMBGui.so.1-o libMBGui.so.1.0.0 Camera.o GmtGridSurface.o MBGui.o MBQuickItem.o MBQuick View.o Surface-oSurfaceRenderer.o moc_Camera.o moc_MBuickItem.o moc-MBuickView.omoc_SurfaceRenderer.o/home/orelilly/Qt/5.14.2/gcc_64/lib/libQt5Quick.so/home/orelilly/Qt/5.14.2/gcc_64/lib/libQt5Guid.so/home/orelilly/Qt/5.14.2/gcc_64/lib/libQt5QmlModels.so/home/orelilly/Qt/5.14.2/gcc_64/lib/libQt5Qml.so/home/orelilly/Qt/5.14.2/gcc_64/lib/libQt5Network.so/home/orelilly/Qt/5.14.2/gcc_64/lib/libQt5Core.so-lGL-lpthread ln-s libMBGui.so.1.0.0 libMBGui.seo.ln-s libMBGui.so.1.0.0 librMBGui.so.1 ln-s libMB Gui.so.1.0
下面是将应用程序代码与共享库链接起来的命令:
g++-g-Wl、-O0-Wl、-rpath、/home/orely/Qt/5.14.2/gcc_64/lib-Wl,-rpath链接,/home/orelly/Qt/5.14.2/gcc_64/lib-o mbgrdviz-3 main.oqrc_qml.o-L/MBGui-lMBGui-lgmt/home/orelilly/Qt/5.14.2/gcc_64/lib/libQt53DQuickExtras.so/home/orelilly/Qt/5.14.2/gcc_64/lib/libQt53DQuick.so/home/orelilly/Qt/5.14.2/gcc_64/lib/libQt5Quick.so/home/orelilly/Qt/5.14.2/gcc_64/lib/libQt53DExtras.so/home/orelilly/Qt/5.14.2/gcc_64/lib/libQt53DRender.so/home/orelilly/Qt/5.14.2/gcc_64/lib/libQt53DInput.so/home/orelilly/Qt/5.14.2/gcc_64/lib/libQt53DLogic.so/home/orelilly/Qt/5.14.2/gcc_64/lib/libQt53DCore.so/home/orelilly/Qt/5.14.2/gcc_64/lib/libQt5Gamepad.so/home/orelilly/Qt/5.14.2/gcc_64/lib/libQt5Guid.so/home/orelilly/Qt/5.14.2/gcc_64/lib/libQt5QmlModels.so/home/orelilly/Qt/5.14.2/gcc_64/lib/libQt5Qml.so/home/orelilly/Qt/5.14.2/gcc_64/lib/libQt5Network.so/home/orelilly/Qt/5.14.2/gcc_64/lib/libQt5Core.so-lGL-lpthread
谢谢!
根据darcamo的注释,发出"start"而不是"run"将加载共享库符号,并在第一条指令处停止,此时您可以发出"continue"。