在C ++中编译SQlite3

时间:2012-05-13 20:22:50

标签: c++ sqlite compilation g++

我用这种方式编译代码:

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

,我可以编译好

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

5 个答案:

答案 0 :(得分:11)

  • 第1步:通过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

答案 1 :(得分:4)

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

  1. 包含对sqlite的任何引用为extern“C”,因为sqlite是用C语言编写的。

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

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

答案 2 :(得分:2)

需要使用sqlite3编译gcc。我尝试了g++,结果是数百个错误和警告。

或许sqlite3可能会以一种C ++编译器编译的方式编写。 C ++编译器更加挑剔并强制执行类型,并且比C编译器更好。

答案 3 :(得分:0)

在具有MinGW32的Windows上,通过以下方式编译动态链接库:

gcc -shared sqlite3.c -o sqlite3.dll

答案 4 :(得分:0)

以下内容在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