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

SQLiteCPP编译报错:undefined reference to sqlite3_libversion(已链接-lsqlite3)

链接SQLiteCpp时出现未定义引用问题

问题背景

已完成SQLiteCpp的编译安装,步骤如下:

  • 克隆SQLiteCpp仓库
  • 执行build.sh
  • 进入build目录,依次执行make、make all、sudo make install
  • 确认头文件已复制到/usr/local/include目录

当前VS Code task.json配置

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ build active file",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-fsanitize=address",
                "-I/usr/local/include/",
                "-I/usr/local/lib/wx/include/gtk3-unicode-3.2",
                 "-I/usr/local/include/wx-3.2", 
                 "-D_FILE_OFFSET_BITS=64",
                  "-DWXUSINGDLL", 
                  "-D__WXGTK__", 
                  "-pthread",
                "-g3",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}",
                "-L/usr/local/lib", 
                "-pthread",   
                "-lwx_gtk3u_xrc-3.2", 
                "-lwx_gtk3u_html-3.2", 
                "-lwx_gtk3u_qa-3.2", 
                "-lwx_gtk3u_core-3.2", 
                "-lwx_baseu_xml-3.2", 
                "-lwx_baseu_net-3.2", 
                "-lwx_baseu-3.2",
                "-lsqlite3",
                "-lSQLiteCpp"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}

编译错误输出

Starting build...
/usr/bin/g++ -fdiagnostics-color=always -fsanitize=address -I/usr/local/include/ -I/usr/local/lib/wx/include/gtk3-unicode-3.2 -I/usr/local/include/wx-3.2 -D_FILE_OFFSET_BITS=64 -DWXUSINGDLL -D__WXGTK__ -pthread -g3 /home/me/src/no_cmake/src/main.cpp -o /home/me/src/no_cmake/src/main -L/usr/local/lib -pthread -lwx_gtk3u_xrc-3.2 -lwx_gtk3u_html-3.2 -lwx_gtk3u_qa-3.2 -lwx_gtk3u_core-3.2 -lwx_baseu_xml-3.2 -lwx_baseu_net-3.2 -lwx_baseu-3.2 -lsqlite3 -lSQLiteCpp
/usr/bin/ld: /usr/local/lib/libSQLiteCpp.a(Database.cpp.o): in function `SQLite::getLibVersion()':
/home/me/src/SQLiteCpp/src/Database.cpp:52: undefined reference to `sqlite3_libversion'
/usr/bin/ld: /usr/local/lib/libSQLiteCpp.a(Database.cpp.o): in function `SQLite::getLibVersionNumber()':
/home/me/src/SQLiteCpp/src/Database.cpp:58: undefined reference to `sqlite3_libversion_number'

解决方法

1. 调整库的链接顺序

问题出在静态库的链接顺序:g++链接器从左到右处理库文件,当处理libSQLiteCpp.a时,它引用了sqlite3的函数,但此时libsqlite3.so还未被扫描,导致未定义引用错误。

需要将-lSQLiteCpp移到-lsqlite3之前,修改后的args部分相关内容如下:

"-lwx_baseu-3.2",
"-lSQLiteCpp",
"-lsqlite3"

2. 关于CMake设置的说明

你看到的几个CMake设置:

set(SQLITECPP_RUN_CPPCHECK OFF CACHE BOOL "" FORCE)
set(SQLITECPP_RUN_CPPLINT OFF CACHE BOOL "" FORCE)
set(SQLITECPP_USE_STATIC_RUNTIME OFF CACHE BOOL "" FORCE)

这些分别是代码检查开关、静态运行时库开关,和当前的链接错误完全无关,不需要在编译时额外配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:25:18