1

次のようなサブディレクトリ プロジェクトを含むプロジェクト/ソース ツリーがあります。

Qt Creator - プロジェクト ソース ツリー

アイデアは、exec (テスト) プロジェクトがop (共有オブジェクト) ライブラリ プロジェクトから呼び出しを行うことです。どちらもルート プロジェクトgviewerによって管理されるサブプロジェクトです。

gviewerプロジェクトをデバッグ (GCC x86_64 を使用) に設定しているにもかかわらず、 opビルドからコンストラクターまたはクラスメソッド/関数にステップインしようとすると、デバッガーはすぐに逆アセンブリを吐き出します。問題がプロジェクト設定であるかどうかを判断するのに苦労してきました(--私が見て、問題を解決するためにどの設定を変更できるかを理解するのに苦労しました)デバッガー設定の問題(また見た)、またはプロジェクトファイルで何かが起こっています。

このcommon.priファイルは op.pro に含まれています。

hereを見て、デバッグ中にシンボルを読み込もうとしてさまざまなビューを試した後、何か間違ったことをしているという結論に達しました。これが GDB のデバッグ構成の問題なのか、.proファイルの問題なのか、QtCreator の問題なのかはわかりません。

内部プロジェクト ライブラリ (この場合は共有オブジェクト) を使用してデバッグ シンボルを読み込んだ経験のある方は、情報を提供していただければ幸いです。ありがとう。


プロジェクト ファイル:

gviewer.pro

TEMPLATE = subdirs
SUBDIRS  = \
    source/op

CONFIG += ordered
SUBDIRS += source/exec

common.pri

INCLUDEPATH += . ..

TEMPLATE = lib

CONFIG -= qt app_bundle

NO_ERR_FLAGS = -Wno-write-strings -Wno-return-type -Wno-unused-parameter

debug:QMAKE_CXXFLAGS_DEBUG += -Wall -Werror -std=c++11 $$NO_ERR_FLAGS -g

DEFINES += OP_DEBUG OP_PLATFORM_X86

LIBS += -lGL -lGLU -lGLEW -lglfw

op.pro

! include(../common.pri) {
    error( Couldn't find the common.pri file! )
}

HEADERS += \
    debug/glout.hpp \
    math/matrix.hpp \
    math/math.hpp \
    math/glm_incl.hpp \
    io/log.hpp

SOURCES += \
    debug/glout.cpp \
    math/matrix.cpp \
    io/log.cpp

exec.pro

INCLUDEPATH += ../

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle qt

SOURCES += main.cpp

LIBS += -L../op -lop

DESTDIR_TARGET = ../../

いくつかのさらなる画像:

exec : エントリ ポイント - main.cpp

メインエントリーポイント

opstep into : 逆アセンブリ - を呼び出した後にソースがロードされていません
op::Log::OpenFile(...)

分解

デバッガーのソース パス- ここでパスをいじっていますが、そのような運はありません。これを正しく使用しているかどうかはわかりませんが

デバッグ設定 - ソース パス

4

2 に答える 2

1

.proファイルには次のものがあります。

LIBS += -L../op -lop

私があなたをよく理解しているなら、これはあなたが問題を抱えているライブラリをリンクしているところです。ただし、プロジェクトのデバッグビルド用のデバッグバージョンと、プロジェクトのリリースバージョン用のリリースバージョンの2つのバージョンをリンクする必要があります。どのOSを使用しているかはわかりませんが、次の例を参考にしてください。

unix:CONFIG(release): LIBS += -L$$PWD/../../Filters/release/ -lFilters
unix:CONFIG(debug): LIBS += -L$$PWD/../../Filters/debug/ -lFilters

現在のプロジェクトがリリースとしてビルドされている場合、最初の行はリリースライブラリをリンクし、現在のプロジェクトがデバッグとしてビルドされている場合、2番目の行はデバッグライブラリのバージョンをリンクしていることに注意してください。

于 2013-02-11T07:47:28.877 に答える
0

受け入れられた回答への賛辞として、ユーザーの構成がShadow Buildingを使用している場合、構成を次のように言い換えることができることに注意してください。

unix:CONFIG(release): LIBS += -L$$PWD/../../path/to/release/folder/ -lLibrary
unix:CONFIG(debug):   LIBS += -L$$PWD/../../path/to/debug/folder/   -lLibrary

の場所/path/to/release|debug/folderは、ソース|プロジェクト ファイル ディレクトリと同じレベルであり、指定されたパス-lLibrary内に存在する、リンクされるバイナリ ライブラリです。-L...

于 2013-02-11T23:44:53.927 に答える