未定义符号错误

未定义符号错误

我正在为别人开发一个基础项目,并且对 Linux 系统还不太熟悉。

我知道如何在 Windows 的 Visual Studio 中使用 sqlite3,但是在 Linux 中它不起作用。

我开始认为这可能是因为 make 文件,它是这样的:

LIBPS4  :=  $(PS4SDK)/libPS4

TEXT    :=  0x926200000
DATA    :=  0x926300000

CC  :=  gcc
AS  :=  gcc
OBJCOPY :=  objcopy
ODIR    :=  build
SDIR    :=  source
IDIRS   :=  -I$(LIBPS4)/include -I. -Iinclude
LDIRS   :=  -L$(LIBPS4) -L. -Llib
CFLAGS  :=  $(IDIRS) -O2 -std=gnu11 -fno-builtin -nostartfiles -nostdlib -Wall -masm=intel -march=btver2 -mtune=btver2 -m64 -mabi=sysv -mcmodel=large
SFLAGS  :=  -nostartfiles -nostdlib -masm=intel -march=btver2 -mtune=btver2 -m64 -mabi=sysv -mcmodel=large
LFLAGS  :=  $(LDIRS) -Xlinker -T $(LIBPS4)/linker.x -Wl,--build-id=none -Ttext=$(TEXT) -Tdata=$(DATA)
CFILES  :=  $(wildcard $(SDIR)/*.c)
SFILES  :=  $(wildcard $(SDIR)/*.s)
OBJS    :=  $(patsubst $(SDIR)/%.c, $(ODIR)/%.o, $(CFILES)) $(patsubst $(SDIR)/%.s, $(ODIR)/%.o, $(SFILES))

LIBS    :=  -lPS4 -lpthread

TARGET = $(shell basename $(CURDIR)).bin

$(TARGET): $(ODIR) $(OBJS)
    $(CC) $(LIBPS4)/crt0.s $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS)
    $(OBJCOPY) -O binary temp.t $(TARGET)
    rm -f temp.t

$(ODIR)/%.o: $(SDIR)/%.c
    $(CC) -c -o $@ $< $(CFLAGS)

$(ODIR)/%.o: $(SDIR)/%.s
    $(AS) -c -o $@ $< $(SFLAGS)

$(ODIR):
    @mkdir $@

.PHONY: clean

clean:
    rm -f $(TARGET) $(ODIR)/*.o

我收到以下错误:

/usr/bin/ld: build/shell.o: undefined reference to symbol 'fflush@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libc.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

我如何解决它?

相关内容