Qt Creator未定义对现有类的引用

时间:2013-01-15 15:40:25

标签: c++ shared-libraries qt-creator codeblocks

我正在编写一个使用另一个我同时开发的库的应用程序。这就产生了一个问题,即QtCreator期望库永远不会改变到删除头导致构建项目失败的程度,并且新类被报告为未定义,即使它们很好地编译到库中也是如此。这是什么?这就像它实际上并没有看图书馆。有什么方法可以强制它让我使用我的库中的新增内容吗?

这是Application .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>

1 个答案:

答案 0 :(得分:1)

我知道使用它开发库和应用程序的痛苦。

您确定要在更新时重新编译吗? - 通常qt创建者只更新当前项目。如果你去参加项目&#39;屏幕和&#39;依赖关系&#39;选项卡,您可以告诉QtCreator一个项目依赖于另一个项目 - 应始终保持同步。

如果库仍处于开发阶段,还应避免将最终库复制到应用程序文件夹。最好的方法是将库从它的原始位置符号链接到您的应用程序目录。这些天甚至更新版本的Windows都提供符号链接(虽然我从未尝试过),所以你应该没办法这样做。

如果这没有帮助,则需要进行详细分析,因此请为应用程序和库发布qmake .pro文件。

编辑:

BTW&#34; QtCreator将期待图书馆永远不会改变&#34; - Qt Creator中没有按&#39;吨关心你的图书馆在所有 - 这是在QMAKE的级别进行处理(其中没有按&#39;吨关心它&#39; S的内容中,也只知道你是怎样的.pro文件),以及后来的链接器。

最容易尝试的是删除一切不是用户从两个项目创建的 - 所以源和你的.pro文件以及任何等效的Code :: Block使用是唯一留下的东西。然后编译两者就好像你现在只写它们一样。如果它仍然无法正常工作,则表示它不是QtCreator(或qmake或链接器)问题,但是您的来源存在问题。

如果这不起作用,那么我怀疑你的构建环境中某处有一些陈旧版本的库。看来你使用linux和ld作为编译器(对吧?)。尝试使用--trace选项查看正在使用的库版本。只需添加

LIBS += -Xlinker --trace

到你的.pro文件,看看编译器输出。