Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблемы с линковкой 
:(
    Опции темы
sunnmas
Дата 17.4.2009, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 17.4.2009

Репутация: нет
Всего: нет



Возникла проблема. Нашел на другом форуме точную формулировку своей проблемы. Решение той проблемы не описано. Прошу помочь:

Цитата

Hi All,
I've built the arm-elf tool chain with the following
gcc 3.0.2 release
binutil 2.11.92.0.7
newlib-1.9.0

When I build the following C++ program I get undefined reference to
_gxx_personality_sj0

file t.hpp
    

Код

class foo
{
public:
foo(void);
~foo(void);
void test(void);
}



file t.cpp


Код

#include "t.hpp"
foo::foo(void)
{;}
foo::~foo(void)
{;}
void foo::test(void)
{;}



file tt.cpp

    
Код


#include "t.hpp"
int main(void)
{
foo k;
while(1)
    k.test();
}



If all the files listed are place in the same source file I don't get the
undefined reference to _gxx_personality_sj0.
Any suggestions?



мой маке файл:

Код

TRGT = arm-elf-
CPP = $(TRGT)g++
CC = $(TRGT)gcc
LD = $(TRGT)ld
AS = $(TRGT)as
OC = $(TRGT)objcopy
SZ = $(TRGT)size

MCU = arm7tdmi
PROJECT = mit

LDSCRIPT = AT91SAM7S64-ROM.ld
source_dirs = source
out_dir = out

#флаги g++
CPPFLAGS = -c -fexpensive-optimizations -O3
#флаги gcc
CCFLAGS = -c -MD -O0
#флаги as
ASFLAGS = -Wa -amhls=$(out_dir)/$(notdir $(<:.s=.lst)) -ahls -mapcs-32
#флаги ld
LDFLAGS = -Wl,-T$(LDSCRIPT),-Map=$(out_dir)/$(PROJECT).map,--cref,-lstdc++,-lsupc++
LDFLAGS2= -mcpu=$(MCU) -nostartfiles -T$(LDSCRIPT) -Wl,--no-warn-mismatch

#флаги objcopy
OCFLAGS = --output-target=binary


search_wildcards := $(addsuffix /*.s,$(source_dirs)) $(addsuffix /*.cpp,$(source_dirs)) $(addsuffix /*.c,$(source_dirs))
VPATH := $(source_dirs)
OBJECTS = $(addprefix $(out_dir)/, $(notdir $(patsubst %.c,%.o, $(patsubst %.cpp,%.o, $(patsubst %.s,%.o, $(wildcard $(search_wildcards)))))))


all: clean binutilsversions $(PROJECT) $(out_dir)/$(PROJECT).elf size

.PHONY: clean

clean:
rm -f $(addprefix $(out_dir)/, *.d *.o *.lst *.map *.out *.bin)

binutilsversions:
@echo ================================================== =================
@$(CPP) --version
@echo ================================================== =================
@$(CC) --version
@echo ================================================== =================
@$(AS) --version
@echo ================================================== =================
@$(LD) --version
@echo ================================================== =================
@echo

$(out_dir)/$(PROJECT).elf: $(OBJECTS)
$(CC) $(OBJECTS) $(LDFLAGS2) -o $@

$(PROJECT): $(out_dir)/$(PROJECT).out
$(OC) $(OCFLAGS) $< $(out_dir)/$(PROJECT).bin

#линковка
$(out_dir)/$(PROJECT).out: $(OBJECTS)
$(CC) $(LDFLAGS) $^ -o $@
#$(LD) $(LDFLAGS) $^ -o $@

#компиляция
$(addprefix $(out_dir)/,%.o): %.c
$(CC) $(CCFLAGS) $< -o $@

$(addprefix $(out_dir)/,%.o): %.cpp
$(CPP) $(CPPFLAGS) $< -o $@

#асемблирование
$(addprefix $(out_dir)/,%.o): %.s
$(AS) $(ASFLAGS) $< -o $@

size: $(out_dir)/$(PROJECT).out
$(SZ) $<

include $(wildcard *.d)

PM MAIL   Вверх
ilyuha
Дата 17.4.2009, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 10.7.2007

Репутация: нет
Всего: нет



; в хидере после объявление класса поставте
PM MAIL   Вверх
xvr
Дата 17.4.2009, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Плюсовые программы надо линковать плюсовым компилятором
В Makefile'е в строке 55 замените $(CC) на $(CPP)
(и в остальных местах, где это используется)

PM MAIL   Вверх
sunnmas
Дата 17.4.2009, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 17.4.2009

Репутация: нет
Всего: нет



Цитата

Плюсовые программы надо линковать плюсовым компилятором
В Makefile'е в строке 55 замените $(CC) на $(CPP)
(и в остальных местах, где это используется)


Помогло. Спасибо огромное
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0669 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.