在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 2117|回复: 0

[求助] 基于ARM的C++编程的疑问

[复制链接]
发表于 2014-12-13 12:12:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本人新手,在WINDOWS下编程已经习惯C++的概念,尝试基于ARM的编程过程中遇到问题。
同样的C++代码,全部放在一个CPP文件里编译链接都没有问题,但分成两个CPP文件后链接时报错。提示信息如下:

arm-linux-g++ -o led.o led.cpp -c
arm-linux-g++ -o main.o main.cpp -c
arm-linux-ld -Ttext 0x0 -o led_icache.elf start.o led.o main.o
main.o: In function `main':
main.cpp: (.text+0x140): undefined reference to `__cxa_end_cleanup'
main.cpp: (.text+0x168): undefined reference to `__cxa_end_cleanup'
main.o: (.ARM.extab+0x0): undefined reference to `__gxx_personality_v0'
main.o: (.eh_frame+0x43): undefined reference to `__gxx_personality_v0'
make: *** [led_icache.bin] 错误 1

下面列出相关代码,一个头文件,两个CPP文件,一个MAKEFILE
led.h:
class LED
{
public:
     LED(int port);
     ~LED();
     void On();
     void Off();
private:
     int mPort;
};

led.cpp:
#include "led.h"
#define  GPJ2CON  (*(volatile unsigned long *) 0xE0200280)
#define  GPJ2DAT  (*(volatile unsigned long *) 0xE0200284)

LED:: LED(int port)
{
mPort = port;
GPJ2CON |= (1 << (mPort * 4));// &Aring;&auml;&Ouml;&Atilde;&Ograve;&yacute;&#339;&Aring;
}

LED::~LED()
{};

void LED::On()
{
GPJ2DAT &= ~(1<<mPort);
}

void LED::Off()
{
GPJ2DAT |= (1<<mPort);
}
maiin.cpp:
#include "led.h"

void delay(unsigned long count)
{
volatile unsigned long i = count;
while (i--);
}

int main()
{
LED led[4] = {LED(0),LED(1),LED(2),LED(3)};
int i=3;

while(1)
{
  led.Off();
  i++;
  i=i%4;
  led.On();
  delay(0x1000000);
}
return 0;
}
makefile:
led_icache.bin: start.o led.o main.o
arm-linux-ld -Ttext 0x0 -o led_icache.elf $^
arm-linux-objcopy -O binary led_icache.elf led_icache.bin
arm-linux-objdump -D led_icache.elf > led_icache_elf.dis
%.o : %.S
arm-linux-gcc -o $@ $< -c

%.o : %.cpp
arm-linux-g++ -o $@ $< -c

clean:
rm *.o *.elf *.bin *.dis mkmini210 -f

如果我把led.h和led.cpp中的内容全部复制到main.cpp文件中则没有任何问题。生成的BIN文件700多字节
后来尝试把makefile中的ld命令中加入参数“-lstdc++”,
然后再次编译链接成功。但是,生成的BIN文件36K,大了许多。猜测链接过程中将stdc++库也加入了其中。所以觉得加这个参数应该不是正确的解决方法。

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

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-23 23:02 , Processed in 0.019868 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表