【问题标题】:Using Sqlite3 with visual C++ 2003在 Visual C++ 2003 中使用 Sqlite3
【发布时间】:2021-09-21 16:23:41
【问题描述】:

我正在尝试在 C++ 2003 编写的程序上使用 sqlite3。 我已经从下载页面下载了 sqlite-amalgamation-3360000.zip 并将 sqlite3.h 添加到头文件,将 shell.c 和 sqlite3.c 添加到资源文件。 然后我在 test.cpp 中写了一个简单的代码来测试连接:

#include "sqlite3.h"
#include <iostream>

int main()
{

    sqlite3 *db;

    sqlite3_open("test.sqlite", &db);


    return 0;
}

但是当我编译它时总是显示错误: sqlite3.c(27474): 错误 C2692: '_ReadWriteBarrier' : C 编译器中需要使用 '/clr' 选项的完全原型函数

我不知道我做错了什么。请问有人可以帮忙吗?

【问题讨论】:

  • 你可能需要旧版本的 sqlite 来支持这么旧的编译器。
  • 谢谢。你会推荐什么版本?
  • 删除 /clr 编译器选项?
  • 我建议升级到当前的编译器,例如 Visual Studio 2019,而不是降级到旧的编译器,例如 Visual Studio .NET 2003
  • @Eljay 我不能因为它是在不能迁移到新版本的旧机器上运行的。

标签: c++ database sqlite visual-studio-2003


【解决方案1】:

_ReadWriteBarriercompiler intrinsic function:编译器被编程为专门处理它。这是在intrin.h 头文件中声明的。

来自sqlite3.c

/*
** Make sure that the compiler intrinsics we desire are enabled when
** compiling with an appropriate version of MSVC unless prevented by
** the SQLITE_DISABLE_INTRINSIC define.
*/
#if !defined(SQLITE_DISABLE_INTRINSIC)
#  if defined(_MSC_VER) && _MSC_VER>=1400
#    if !defined(_WIN32_WCE)
#      include <intrin.h>
#      pragma intrinsic(_byteswap_ushort)
#      pragma intrinsic(_byteswap_ulong)
#      pragma intrinsic(_byteswap_uint64)
#      pragma intrinsic(_ReadWriteBarrier)
#    else
#      include <cmnintrin.h>
#    endif
#  endif
#endif

由于您在旧版本的 MSVC 上进行编译,我建议通过定义 SQLITE_DISABLE_INTRINSIC 预处理器符号来禁用它。

【讨论】:

  • Botje:我认为它是在我设置 SQLITE_DISABLE_INTRINSIC 一个值之后编译的,但是当我运行 exe 文件时,它会弹出一个错误:JIT 调试:PID 无效
  • 不知道。我只使用最新版本的 IDE。
猜你喜欢
  • 2015-12-13
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多