реклама на сайте
подробности

 
 
> uClinux (LPC2468) и C++, Проблема сборки исходников
uni
сообщение Jul 26 2016, 05:04
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 5-04-06
Из: Екатеринбург
Пользователь №: 15 809



Поправил ещё раз
Сталкивался ли кто с проблемой отсутствия в результирующем коде вызова глобальных конструкторов по умолчанию (C++)? Исполняемый файл работает, только нет конструкторов, что очень затрудняет жизнь.

Опции сборки:
Код
# Place -D or -U options here for C++ sources
CPPDEFS = -Dlinux  
CPPDEFS += -D__linux__
CPPDEFS += -Dunix
CPPDEFS += -D__uClinux__
CPPDEFS += -DEMBED
#CPPDEFS += -pthread

#---------------- Compiler Options C++ ----------------
#  -g*:          generate debugging information
#  -O*:          optimization level
#  -f...:        tuning, see GCC manual and libc documentation
#  -Wall...:     warning level
#  -Wa,...:      tell GCC to pass this to the assembler.
CPPFLAGS = $(CPPDEFS)
CPPFLAGS += -O$(OPT)
CPPFLAGS += -msoft-float
CPPFLAGS += -fomit-frame-pointer
CPPFLAGS += -fno-common
CPPFLAGS += -fno-builtin
#CPPFLAGS += -fpack-struct=1
CPPFLAGS += -Wall

#---------------- Linker Options ----------------
LDFLAGS = -lpthread
LDFLAGS += -Wl,-Map=$(TARGET).map
LDFLAGS += -Wl,-elf2flt="-r"


Сообщение отредактировал uni - Jul 26 2016, 06:12


--------------------
Россия навсегда!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
uni
сообщение Aug 2 2016, 05:47
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 5-04-06
Из: Екатеринбург
Пользователь №: 15 809



Короче, победил я это дело. Теперь почти функциональный C++ получился. Шаблоны заработали, вызов конструкторов, деструкторов, наследование, а вот с остальным всё очень нестабильно. Оказывается ключ оптимизации очень сильно влияет на появление SIGSEGV. С одним ключом он есть, с другим нет при запуске. В общем, видимо сборка старенькая, еле дышит наладом, нужно очень аккуратно использовать функционал C++.

Итак, добавил ключики:

Код
CPPFLAGS += -fno-exceptions
LDFLAGS += -lstdc++


В Makefile

Код
CRTBEGIN_OBJ:=$(shell $(CC) $(CPPFLAGS) -print-file-name=crtbegin.o)
CRTEND_OBJ:=$(shell $(CC) $(CPPFLAGS) -print-file-name=crtend.o)

$(CC) $(CPPFLAGS) $(CRTBEGIN_OBJ) $(OBJECTS) $(CRTEND_OBJ) $(LDFLAGS) -o $(TARGET)


И обязательно играемся с

Код
# Optimization level, can be [0, 1, 2, 3, s].
#     0 = turn off optimization. s = optimize for size.
OPT = 2


Возможно нужно было ещё crt1.o, crti.o и crtn ручками вставить в нужном порядке, но я забыл ключ компоновщика, чтобы их автоматом не включать.

Да... какое поле возможностей сразу открылось. Жаль STL нету (пока). У uClibc вроде есть там какой-то урезанный вариант или это отдельно идёт, посмотрим потом.


--------------------
Россия навсегда!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 21:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01356 секунд с 7
ELECTRONIX ©2004-2016