19

我这样编译代码:

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

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

4

5 回答 5

15
  • 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
于 2012-11-21T02:57:25.160 回答
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”将您的程序链接到新创建的库

于 2012-05-13T20:39:51.837 回答
2

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

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

于 2012-09-26T13:05:34.570 回答
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

于 2019-05-02T05:30:50.467 回答
0

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

gcc -shared sqlite3.c -o sqlite3.dll
于 2018-01-14T10:36:28.890 回答