1

同時に開発している別のライブラリを使用するアプリケーションを作成しています。これにより、QtCreator が、削除されたヘッダーが原因でプロジェクトのビルドが失敗するまでライブラリが変更されないことを期待し、新しいクラスがライブラリにコンパイルされたとしても未定義として報告されるという問題が発生します。これは何ですか?図書館を実際に見ていないようなものです。ライブラリに新しく追加されたものを強制的に使用できるようにする方法はありますか?

ここにアプリケーション.proがあります

QT       += core gui opengl

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = BlockEditor
TEMPLATE = app


SOURCES += main.cpp\
    mainwindow.cpp \
    openglqt.cpp \
    tilelabel.cpp

HEADERS  += mainwindow.h \
    openglqt.h \
    tilelabel.h

FORMS    += mainwindow.ui

LIBS += -L/usr/local/lib -lGLU -lGLEW

QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/libs
QMAKE_RPATH=

release {
    LIBS += -L$$PWD/../drEngine/bin/Release/ -ldrEngine
}
debug {
    LIBS += -L$$PWD/../drEngine/bin/Debug/ -ldrEngine
}

INCLUDEPATH += $$PWD/../drEngine
DEPENDPATH += $$PWD/../drEngine

QMAKE_CXXFLAGS += -std=c++11

ライブラリは Code::Blocks で開発されています

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
    <FileVersion major="1" minor="6" />
    <Project>
        <Option title="Dark Realms Engine" />
        <Option pch_mode="2" />
        <Option compiler="gcc" />
        <Build>
            <Target title="Debug">
                <Option output="bin/Debug/drEngine" imp_lib="$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).a" def_file="$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).def" prefix_auto="1" extension_auto="1" />
                <Option object_output="obj/Debug/" />
                <Option type="3" />
                <Option compiler="gcc" />
                <Option createDefFile="1" />
                <Option createStaticLib="1" />
                <Compiler>
                    <Add option="-g" />
                </Compiler>
            </Target>
            <Target title="Release">
                <Option output="bin/Release/drEngine" imp_lib="$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).a" def_file="$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).def" prefix_auto="1" extension_auto="1" />
                <Option object_output="obj/Release/" />
                <Option type="3" />
                <Option compiler="gcc" />
                <Option createDefFile="1" />
                <Option createStaticLib="1" />
                <Compiler>
                    <Add option="-O3" />
                </Compiler>
                <Linker>
                    <Add option="-s" />
                </Linker>
            </Target>
        </Build>
        <Compiler>
            <Add option="-std=c++11" />
            <Add option="-Wall" />
        </Compiler>
        <Unit filename="Block.cpp" />
        <Unit filename="Block.hpp" />
        <Unit filename="BlockList.cpp" />
        <Unit filename="BlockList.hpp" />
        <Unit filename="Camera2D.cpp" />
        <Unit filename="Camera2D.hpp" />
        <Unit filename="Camera3D.cpp" />
        <Unit filename="Camera3D.hpp" />
        <Unit filename="Entity.hpp" />
        <Unit filename="Includes.hpp" />
        <Unit filename="RenderInfo.cpp" />
        <Unit filename="RenderInfo.hpp" />
        <Unit filename="Renderer.cpp" />
        <Unit filename="Renderer.hpp" />
        <Unit filename="Scene.cpp" />
        <Unit filename="Scene.hpp" />
        <Unit filename="TextureAtlas.cpp" />
        <Unit filename="TextureAtlas.hpp" />
        <Unit filename="dr.hpp" />
        <Unit filename="isoMap.cpp" />
        <Unit filename="isoMap.hpp" />
        <Extensions>
            <envvars />
            <code_completion />
            <lib_finder disable_auto="1" />
            <debugger />
            <DoxyBlocks>
                <comment_style block="0" line="0" />
                <doxyfile_project />
                <doxyfile_build />
                <doxyfile_warnings />
                <doxyfile_output />
                <doxyfile_dot />
                <general />
            </DoxyBlocks>
        </Extensions>
    </Project>
</CodeBlocks_project_file>
4

1 に答える 1

1

私はそれを使ってライブラリとアプリを開発する苦労を知っています。

更新時に両方を再コンパイルしてもよろしいですか? - 通常、qt 作成者は現在のプロジェクトのみを更新します。「プロジェクト」画面と「依存関係」タブに移動すると、あるプロジェクトが別のプロジェクトに依存していることを QtCreator に伝えることができます - 常に同期を保つ必要があります。

ライブラリがまだ開発中の場合は、最終的なライブラリをアプリケーション フォルダにコピーすることも避けてください。最善の方法は、ライブラリを元の位置からアプリケーション ディレクトリにシンボリック リンクすることです。最近では、Windows の新しいバージョンでもシンボリック リンクが提供されているため (自分で試したことはありません)、この方法で問題なく実行できるはずです。

これで問題が解決しない場合は、詳細な分析が必要です。そのため、アプリケーションとライブラリの両方に qmake .pro ファイルを投稿してください。

編集:

ところで、「QtCreator はライブラリが変更されないことを期待しています」 - Qt Creator はライブラリをまったく気にしません - これは qmake のレベルで処理されます (内容も気にしません。 .pro ファイルに記述されている)、およびその後のリンカー。

最も簡単なのは、両方のプロジェクトからユーザーが作成したものではないすべてのものを削除することです。そのため、ソースと .pro ファイル、および Code::Block が使用する同等のものだけが残ります。次に、今書いたように両方をコンパイルします。それでも問題が解決しない場合は、QtCreator (または qmake、リンカー) の問題ではなく、ソースの問題であることを意味します。

これが機能しない場合は、ビルド環境のどこかにライブラリの古いバージョンがあると思われます。linux と ld をコンパイラとして使用されているようです (そうですか?)。--trace オプションを使用して、使用されているライブラリのバージョンを確認してください。追加するだけ

LIBS += -Xlinker --trace

.pro ファイルに移動し、コンパイラの出力を確認します。

于 2013-01-15T16:30:34.053 に答える