【问题标题】:Compiling of SQlite3 in C++用 C++ 编译 SQlite3
【发布时间】:2012-05-21 10:36:06
【问题描述】:

我是这样编译代码的:

g++ main.cpp -I sqlite3

其中 sqlite3 是一个文件夹,其中包含我从 sqlite-amalgamation-3071100.zip 收到的源文件,-I 是包含源的标志。

此存档包含:shell.c、sqlite3.c、sqlite3.h、sqlite3ext.h。

这是我收到的:

undefined reference to `sqlite3_open'

程序只包含#include和函数sqlite3_open(...)的调用;


如果我制作“sudo apt-get install libsqlite3-dev”并使用命令编译程序,我可以编译一切正常

g++ main.cpp -lsqlite3

但我想解决这个问题,因为我不想在另一台计算机上安装一些库,我无权访问!

【问题讨论】:

  • 您需要构建库,然后链接到它。
  • 为什么您认为在未安装 libsqlite3 库时可以链接它?
  • Kerrek SB,您会看到该库仅包含 4 个文件。当我有 sqlite3.c 和 sqlite3.h 文件时,如何构建它以及我需要什么。我需要制作“g++ -o sqlite3 sqlite3.h sqlite3.c”吗?我只是尝试用“g++ -o myprog myprog.cpp sqlite3.c sqlite3.h”编译它但是我收到很多错误。
  • 你要构建什么 - sqlite3 命令行客户端或 sqlite3 库?

标签: c++ sqlite compilation g++


【解决方案1】:

以下内容在 Ubuntu 上对我有用:

gcc -o test test.c sqlite3.c -lpthread -idl

  1. 我在源文件 (test.c) 中声明了 #include "sqlite3.h" #include 不起作用。
  2. gcc -o test test.c sqlite3.c -lpthread -idl

参考如下:

https://www.sqlite.org/draft/howtocompile.html

【讨论】:

    【解决方案2】:

    在 Windows 上使用 MinGW32 编译动态链接库:

    gcc -shared sqlite3.c -o sqlite3.dll
    

    【讨论】:

      【解决方案3】:
      • Step1:通过gcc将sqlite3.c编译成sqlite3.o
      • 第二步:用g++编译你的c++代码和sqlite3.o

      我的用于 sqlite shell 和 c++ api 测试的 makefile:

        1 CXX = g++
        2 cc = gcc
        3 
        4 LIB = -lpthread -ldl
        5 BIN = sqlite apiTest
        6 
        7 all : $(BIN)
        8 sqlite : sqlite3.c shell.c
        9     $(cc) -o $@ $^ $(LIB) 
       10 apiTest : apiTest.cpp sqlite3.o
       11     $(CXX) -o $@ $^ $(LIB) 
       12 sqlite3.o : sqlite3.c
       13     $(cc) -o $@ -c $^
       14 
       15 clean :
       16     rm -f $(BIN)
       17 
       18 .PHONY: all, clean
      

      【讨论】:

        【解决方案4】:

        需要编译sqlite3gcc。我尝试了g++,结果出现了数百个错误和警告。

        也许sqlite3 应该以这样一种方式编写,即它可以使用 C++ 编译器进行编译。 C++ 编译器的选择和强制类型要好​​得多,而且比 C 编译器要好得多。

        【讨论】:

          【解决方案5】:

          http://www.sqlite.org/download.html下载sqlite合并。

          1. 包括对 sqlite 的任何引用作为外部“C”,因为 sqlite 是用 C 编写的。

          2. 使用“gcc -c sqlite3.c”创建 sqlite 库。

          3. 使用“g++ main.c sqlite3.o”将您的程序链接到新创建的库

          【讨论】:

          • 错误:从‘void*’到‘Table*’的无效转换等等!!! 100 行。 "g++ main.cpp sqlite3.c" sqlite3.cpp 不存在。
          • 您需要使用 C 编译器 (gcc) 编译 sqlite3.c
          • sqlite3 是用 C 编写的,而不是 C++。您需要使用gcc 编译它,而不是g++。您可能需要在 C++ 代码中使用extern "C"
          • 从提供的链接下载 sqlite3 源代码。您将看到一个名为“sqlite3.c”的文件,您需要在编译时将其提供给 g++。
          • @AsierGutierrez:这是不正确的。 sqlite3.c 中的 C 代码与 C++ 不兼容(请记住,C++ 不是 C 的严格超集)。你需要用C编译器编译sqlite3.c;完成后,您可以将其与 C++ 代码链接。 sqlite3.h 已经有一个条件 extern "C",所以这部分被处理了。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-13
          • 1970-01-01
          • 1970-01-01
          • 2016-11-17
          • 2010-12-22
          • 2014-05-23
          • 2013-09-16
          相关资源
          最近更新 更多