Member 13227401 Ответов: 1

Неопределенный символ ошибки


Я работаю над базовым проектом, созданным кем-то другим, и я вроде как новичок в системе linux.

Я знаю, как использовать sqlite3 в Visual Studio Windows, однако в 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



как мне это исправить?

Что я уже пробовал:

Я пробовал запустить код в Visual studio Windows и преуспел, Я пробовал запустить его в Linux и потерпел неудачу.
тай заранее.

1 Ответов

Рейтинг:
2

Jon Shearin

Вот что я нашел. Похоже, вам нужно добавить ссылку на библиотеку, в которой находится fflush.

DSO отсутствует в командной строке


Member 13227401

fflush - это струна.функция h, насколько я знаю, строка.h находится в /usr/include, но я действительно не понимал, как это сделать.
@Jon Shearin

Richard MacCutchan

fflush-это часть stdio.h, не имеющая ничего общего со строками. Однако проблема, с которой вы столкнулись, не является проблемой компилятора. Вам нужно включить стандартную библиотеку C 'libc' в параметры вашей ссылки.

Member 13227401

Ты прав, стдио.- это моя вина. Мне уже удалось скомпилировать его, но это не сработало. Я решил пока отказаться от этого.
Я не знаю, противоречит ли это правилам, но вы можете посмотреть это :
https://askubuntu.com/questions/1020388/undefined-symbol-error

Richard MacCutchan

Я только что построил приложение оболочки с помощью команды:
gcc -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION shell.c sqlite3.c как описано в разделе Как Скомпилировать SQLite[^Я еще не успел опробовать полное слияние, это работа на будущее.