Page 1 of 1

Сборка проекта на C++ с GCC 5.4.0

Posted: Fri Dec 21, 2018 11:06 pm
by Nikolas
Всем доброго времени суток!

Использую Toolchain от Serge последней версии (http://ftp.kolibrios.org/users/Serge/new/Toolchain/), ипри попытке собрать пример hello из "sdk/samples" с поддержкой C++ столкнулся с проблемой отсутствия библиотеки libgcc_eh.a. Если не же включать эту библиотеку в Makefile, то получаю ошибку "/static.lds:12: undefined symbol `__crt_start' referenced in expression". Что можно сделать в этой ситуации?

При попытке сборки с GCC 4.8.5 получаю ту же самую ошибку с отсутствием __crt_start. Makefile выглядит так (взят из примера "hello"):
Spoiler:

Code: Select all

CC = kos32-gcc
LD = kos32-ld 

SDK_DIR:= $(abspath ../..)

LDFLAGS = -static -T$(SDK_DIR)/sources/newlib/static.lds

CFLAGS = -c -fno-ident -O2 -fomit-frame-pointer -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32

INCLUDES= -I $(SDK_DIR)/sources/newlib/libc/include
LIBPATH:= -L $(SDK_DIR)/lib

SOURCES = hello.c	\
	  $(NULL)
 

OBJECTS =  $(patsubst %.c, %.o, $(SOURCES))

default: hello

hello: $(OBJECTS) Makefile.static
	$(LD) $(LDFLAGS) $(LIBPATH) -o hello $(OBJECTS) -lsupc++ -lgcc_eh -lc.dll -lgcc
	objcopy hello -O binary

%.o : %.c Makefile.static $(SOURCES)
	$(CC) $(CFLAGS) $(INCLUDES) -o $@ $<

Re: Сборка проекта на C++ с GCC 5.4.0

Posted: Sat Dec 22, 2018 11:57 am
by Siemargl

Re: Сборка проекта на C++ с GCC 5.4.0

Posted: Sat Dec 22, 2018 2:45 pm
by Nikolas
Да, видел. Однако, libgcc_eh.a там всё равно отсутствует, и собрать не получается. Какой порядок линковки библиотек будет правильным для C++ с этой версией GCC?

Re: Сборка проекта на C++ с GCC 5.4.0

Posted: Sat Dec 22, 2018 9:43 pm
by Nikolas
Проблема решена. Makefile, с которым С++ проект собирается и запускается, выглядит так:
Spoiler:

Code: Select all

CC = kos32-g++
LD = kos32-ld 

SDK_DIR:= $(abspath ../..)

LDFLAGS = -static -T$(SDK_DIR)/sources/newlib/app-static.lds

CFLAGS = -c -fno-ident -O2 -fomit-frame-pointer -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32

INCLUDES= -I $(SDK_DIR)/sources/newlib/libc/include
LIBPATH:= -L $(SDK_DIR)/lib

SOURCES = hello.c	\
	  $(NULL)
 

OBJECTS =  $(patsubst %.c, %.o, $(SOURCES))

default: hello

hello: $(OBJECTS) Makefile.static
	$(LD) $(LDFLAGS) $(LIBPATH) -Map hello.map -o hello $(OBJECTS) -lstdc++ -lsupc++ -lc -lgcc -lc
	objcopy hello -O binary

%.o : %.c Makefile.static $(SOURCES)
	$(CC) $(CFLAGS) $(INCLUDES) -o $@ $<

Re: Сборка проекта на C++ с GCC 5.4.0

Posted: Fri Jan 01, 2021 12:23 pm
by maxcodehack
А теперь, строка с ld, должна выглядеть так:

Code: Select all

$(LD) $(LDFLAGS) $(LIBPATH) -Map hello.map -o hello $(OBJECTS) -lstdc++ -lsupc++ -lgcc -lc.dll