gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:48:32 25 4
gpt4 key购买 nike

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

这是应用程序.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>

最佳答案

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

您确定在更新时重新编译两者吗? - 通常 qt creator 只更新当前项目。如果您转到“项目”屏幕和“依赖项”选项卡,您可以告诉 QtCreator 一个项目依赖于另一个项目 - 应该始终保持同步。

如果库仍在开发中,还要避免将最终库复制到应用程序文件夹。最好的方法是将库从其原始位置符号链接(symbolic link)到您的应用程序目录。如今,即使是更新版本的 Windows 也提供了符号链接(symbolic link)(尽管我自己从未尝试过),因此您应该可以轻松地做到这一点。

如果这没有帮助,则需要 mor edetailed analysys,因此请发布您的应用程序和库的 qmake .pro 文件。

编辑:

顺便说一句“QtCreator 将期望库永远不会改变”——Qt Creator 根本不关心你的库——这是在 qmake 级别处理的(它也不关心它的内容,它只知道 .pro 文件中写的是什么)和后来的链接器。

最简单的尝试是从两个项目中删除非用户创建的所有内容 - 因此源代码和您的 .pro 文件以及 Code::Block 使用的任何等效内容是唯一保留的内容。然后编译它们,就好像你现在刚刚编写它们一样。如果它仍然不起作用,则意味着它不是 QtCreator(或 qmake,或链接器)的问题,而是您的源代码的问题。

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

LIBS += -Xlinker --trace

到您的 .pro 文件,并查看编译器输出。

关于c++ - Qt Creator 未定义对现有类的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14341257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com