我用这种方式编译代码:
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
,我可以编译好
但是我想解决这个问题,因为我不想在另一台计算机上安装一些库,我无法访问它!
答案 0 :(得分:11)
我的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合并。
包含对sqlite的任何引用为extern“C”,因为sqlite是用C语言编写的。
使用“gcc -c sqlite3.c”创建sqlite库。
使用“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
参考如下: