2985|0

78

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

***M68k-elf-gcc(for uclinux)真的支持C++吗?*** [复制链接]

我编译一个非常简单的c++程序:
exam.cpp:
class A
{
        public:
        A();
        ~A();
        void func(); //virtual void func()
        private:
        int m_i;
};
A::A()
{
        m_i = 0;
}
A::~A()
{}
void A::func()
{
        ++m_i;
}

int main()
{
        return 0;
}

我的makefile文件如下:
CC = m68k-elf-gcc
LD = m68k-elf-gcc
LDFLAGS = -Os -elf2flt -m5307 -g -static
CFLAGS  = -Os -Wall -m5307 -c -g -static
EXEC = exam
OBJECTS = exam.o
all: $(EXEC)
$(EXEC):$(OBJECTS)
        $(LD) $(LDFLAGS) -o $@ $(OBJECTS) $(SYSLIBS)
exam.o:exam.cxx
        $(CC) $(CFLAGS) $<
.PHONY : clean
clean:
        -rm -f $(EXEC) *.elf *.o *.gdb

按照上面操作是没有问题,make后,编译通过且运行正常

但是只要作一个小小的改动马上就天下大乱了:
改动仅仅是在void func()的函数声明前加一个 virtual.
首先出的问题是-----编译错误:

exam.elf2flt:(.rodata._ZTI1A[typeinfo for A]+0x0): undefined reference to `vtable for __cxxabiv1::__class_type_info'
collect2: ld returned 1 exit status
make: *** [exam] Error 1

解决办法是在makefile的连接命令中加入对libstdc++库的连接
$(LD) $(LDFLAGS) -o $@ $(OBJECTS) $(SYSLIBS) –lstdc++

编译还是错误:
ERROR: text=0x8820 overlaps data=0x0 ?
collect2: ld returned 1 exit status
make: *** [exam] Error 1

增加一个编译选项就可以了:
CFLAGS  = -Os -Wall -m5307 -c -g -static -msep-data

编译àOK!

接着下到板子上面运行,马上就发生了错误:
$ exam
BINFMT_FLAT: reloc outside program 0x64656c (0 - 0xff641a94/0x8800), killing exa
m!
SIGSEGV

到了这一步的时候,无论我如何努力都没有办法既保证编译通过也保证运行正确了,我实在是没有办法了,我唯一能作的就是怀疑m68-elf-gcc对C++的支持程度!!!!!!

我真的希望我是某个地方弄错了,因为我必须依靠uclinux运行大型C++程序,请有经验的兄弟指点一下,非常感谢!!!!!!
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表