You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt应用集成ObjectBox遇未定义引用错误求助

问题

在Qt 5.12 + MinGW 7.3环境下,往空Qt应用中集成ObjectBox,按官方指南操作后下载了win x64平台v0.17.0版本的ObjectBox-C库,但编译时出现未定义引用错误,怀疑是.pro文件链接配置问题。相关代码及错误信息如下:

.pro文件内容

QT -= gui

CONFIG += c++11 console
CONFIG -= app_bundle

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
        main.cpp

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/objectbox/lib/ -lobjectbox
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/objectbox/lib/ -lobjectbox
INCLUDEPATH += $$PWD/objectbox/include
DEPENDPATH += $$PWD/objectbox/include

main.cpp内容

#include <QCoreApplication>
#include "objectbox.hpp"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    printf("Using ObjectBox version %s\n", obx_version_string());

    return a.exec();
}

编译错误信息

C:/Qt/Tools/mingw730_64/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory 'C:/temp/obxTut/ObjectBoxTutorial'
g++ -c -fno-keep-inline-dllexport -g -std=gnu++11 -Wall -W -Wextra -fexceptions -mthreads -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DQT_QML_DEBUG -DQT_CORE_LIB -I. -Iobjectbox\include -I..\..\..\Qt\5.12.11\mingw73_64\include -I..\..\..\Qt\5.12.11\mingw73_64\include\QtCore -Idebug -I..\..\..\Qt\5.12.11\mingw73_64\mkspecs\win32-g++  -o debug\main.o main.cpp
In file included from main.cpp:2:0:
objectbox\include/objectbox.hpp:711:21: warning: 'std::vector<long long unsigned int> obx::{anonymous}::idVectorOrThrow(OBX_id_array*)' defined but not used [-Wunused-function]
 std::vector<obx_id> idVectorOrThrow(OBX_id_array* cIds) {
                     ^~~~~~~~~~~~~~~
objectbox\include/objectbox.hpp:703:14: warning: 'OBX_id_array obx::{anonymous}::cIdArrayRef(const std::vector<long long unsigned int>&)' defined but not used [-Wunused-function]
 OBX_id_array cIdArrayRef(const std::vector<obx_id>& ids) {
              ^~~~~~~~~~~
g++ -Wl,-subsystem,console -mthreads -o debug\ObjectBoxTutorial.exe debug/main.o  -LC:\temp\obxTut\ObjectBoxTutorial\objectbox\lib -lobjectbox C:\Qt\5.12.11\mingw73_64\lib\libQt5Cored.a   
debug/main.o: In function `idVectorOrThrow':
C:\temp\obxTut\ObjectBoxTutorial/objectbox/include/objectbox.hpp:712: undefined reference to `obx::internal::throwLastError(int, char const*)'
C:\temp\obxTut\ObjectBoxTutorial/objectbox/include/objectbox.hpp:718: undefined reference to `obx::internal::throwIllegalStateException(char const*, char const*)'
debug/main.o: In function `applyTo':
C:\temp\obxTut\ObjectBoxTutorial/objectbox/include/objectbox.hpp:828: undefined reference to `obx::internal::throwIllegalStateException(char const*, char const*)'
collect2.exe: error: ld returned 1 exit status
mingw32-make[1]: *** [Makefile.Debug:65: debug/ObjectBoxTutorial.exe] Error 1
mingw32-make: *** [Makefile:38: debug] Error 2
mingw32-make[1]: Leaving directory 'C:/temp/obxTut/ObjectBoxTutorial'
23:05:08: The process "C:\Qt\Tools\mingw730_64\bin\mingw32-make.exe" exited with code 2.
Error while building/deploying project ObjectBoxTutorial (kit: Desktop Qt 5.12.11 MinGW 64-bit)
When executing step "Make"
解决方案

出现未定义引用错误的核心原因是只链接了ObjectBox的C库,但C++封装的内部辅助函数未被编译——ObjectBox的C++ API基于C库封装,部分逻辑在头文件中实现,依赖额外的cpp源文件提供支持。按以下步骤修复:

  • 提取对应v0.17.0版本的ObjectBox-C++源码中的src/objectbox.cpp文件,放到Qt项目目录下。
  • 修改.pro文件,将该cpp文件添加到SOURCES列表:
SOURCES += \
        main.cpp \
        objectbox.cpp
  • 确认下载的ObjectBox-C库是MinGW编译版本,不同编译器生成的库无法兼容,MinGW版本通常以.a为后缀。
  • 清理项目后重新执行qmake,再进行编译。

补充:早期ObjectBox的C封装未将所有逻辑打包到C库中,必须手动编译对应的cpp文件才能完成C API的链接。若问题仍存在,检查库路径是否正确,确保-L指定的目录下存在对应版本的库文件。

内容的提问来源于stack exchange,提问作者user13633679

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 18:01:17