Qt Creator对现有类的未定义引用
Qt Creator undefined reference to existing class
我正在编写一个应用程序,该应用程序使用我同时开发的另一个库。这就产生了一个问题,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>
我知道使用它开发库和应用程序的痛苦。
您确定在更新时都重新编译了吗?通常qt creator只更新当前项目。如果你去"项目"屏幕和"依赖"选项卡,你可以告诉QtCreator一个项目依赖于另一个项目-应该始终保持同步。
如果库仍在开发中,也避免将最终库复制到应用程序文件夹。最好的方法是符号链接库从它的原始位置到您的应用程序目录。现在,即使是较新的windows版本也提供了符号链接(虽然我自己从来没有尝试过),所以你用这种方法应该没有问题。
如果这没有帮助,需要更详细的分析,所以请发布你的qmake .pro文件为应用程序和库。
编辑:BTW "QtCreator将期望库永远不会改变" - QtCreator根本不关心你的库-这是在qmake级别处理的(它也不关心它的内容,它只知道在。pro文件中写了什么),以及后来的链接器。
最简单的尝试是从两个项目中删除所有不是用户创建的东西-所以源代码和你的.pro文件以及任何等效的Code::Block使用是唯一留下来的东西。然后编译它们,就像您刚刚编写它们一样。如果它仍然不工作,这意味着这不是QtCreator(或qmake,或链接器)的问题,而是你的源代码的问题。
如果这不起作用,那么我怀疑您的构建环境中有一些过时的库版本。似乎你使用linux和ld作为编译器(对吗?)。尝试使用——trace选项来查看正在使用的库的版本。只需添加
LIBS += -Xlinker --trace
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- 使用mysql c++连接器的未定义引用
- 对 Scalar ::Scalar() 的未定义引用
- 对复制 CTOR 和 CTOR 的未定义引用
- 对显式实例化的模板函数的未定义引用
- TensorRT (C++ API) 对"createNvOnnxParser_INTERNAL"的未定义引用
- 2个模板化类的非模板友元函数未定义引用错误
- 编译 libfluid 样本控制器时对"event_base_del_virtual"的未定义引用
- 获取对function_name的未定义引用
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- 对结构方法的未定义引用
- 使用内联函数 c++ 的未定义引用
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 对 DLOPEN 的未定义引用
- QT C++中对全局变量的未定义引用
- 快速数学导致对"__pow_finite"的未定义引用
- 对 boost::system::d etail::system_category_instance 的未定义引用,从
- OpenCV 3.4.3 中对 'cv::String::d eallocate()' 错误的未定义引用