Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ Compile issues, sqlite3

Tags:

c++

sqlite

I'm trying to compile a C++ program that utilizes sqlite3. I'm using this makefile:

CXX = g++ 
CC = gcc 
CFLAGS = -c -O2 
CXXFLAGS = -Wall -O3 -std=c++11
SQLFLAGS = -DSQLITE_THREADSAFE=0

OUTPUTBIN = bot
OUTPUTDIR = ./bin/
MKDIR = mkdir -p $(OUTPUTDIR) 
OBJECTC = sqlite3.o
CSOURCES = sqlite3.c  
CXXSOURCES = main.cpp bot.cpp


all: project

project: createdir sql compilecpp


createdir:
    $(MKDIR)

sql:
    $(CC) $(CSOURCES) $(SQLFLAGS) $(CFLAGS) -o $(OUTPUTDIR)$(OBJECTC)

compilecpp:
    $(CXX) $(OUTPUTDIR)$(OBJECTC) $(CXXSOURCES) $(CXXFLAGS) -o $(OUTPUTDIR)$(OUTPUTBIN)

But outputs these errors:

akf@akf-v5 ~/Documents/Proletarian/c++ $ make
mkdir -p ./bin/ 
gcc  sqlite3.c   -DSQLITE_THREADSAFE=0 -c -O2  -o ./bin/sqlite3.o
g++  ./bin/sqlite3.o main.cpp bot.cpp -Wall -O3 -std=c++11 -o ./bin/bot
./bin/sqlite3.o: In function `unixDlError':
sqlite3.c:(.text+0x170f4): undefined reference to `dlerror'
./bin/sqlite3.o: In function `unixDlClose':
sqlite3.c:(.text+0x5de9): undefined reference to `dlclose'
./bin/sqlite3.o: In function `unixDlSym':
sqlite3.c:(.text+0x5e01): undefined reference to `dlsym'
./bin/sqlite3.o: In function `unixDlOpen':
sqlite3.c:(.text+0x5e21): undefined reference to `dlopen'
collect2: error: ld returned 1 exit status
make: *** [compilecpp] Error 1

I'm extremely confused as to what's causing this. I can see that sqlite3 is a C program, but I didn't think it would cause any issues.

like image 599
ES-AKF Avatar asked Feb 12 '23 01:02

ES-AKF


2 Answers

The error messages tell that dlerror, dlclose, dlsym and dlopenare used but can't be found. Those functions are part of the dynamic link loader. You have to link the dynamic linker, too. Add -ldl to your link flags. See also dlopen manpage for your system.

like image 172
johannes Avatar answered Feb 15 '23 10:02

johannes


A bit late, but - the simplest possible Makefile:

all: sqlite3

sqlite3: sqlite3.o shell.o
    gcc sqlite3.o shell.o -lpthread -ldl -o sqlite3

sqlite3.o: sqlite3.c sqlite3.h
    gcc -c sqlite3.c -lpthread -ldl -o sqlite3.o

shell.o: shell.c
    gcc -c shell.c -lpthread -o shell.o

clean:
    rm *.o
    rm sqlite3
like image 44
asdfgh Avatar answered Feb 15 '23 09:02

asdfgh