天嵌 ARM开发社区

 找回密码
 注册
查看: 1909|回复: 5

make 后的错误

[复制链接]
yihuan 发表于 2010-1-6 20:06:46 | 显示全部楼层 |阅读模式
我使用的交叉编译环境是光盘提供的,程序及Makefile都没有问题,但是在make后有如下错误“undefined  reference to ' __aeabi_unwind_cpp_pro'”,而且不止一个程序这样,是多个程序这样,请问如何解决?
 楼主| yihuan 发表于 2010-1-6 20:07:35 | 显示全部楼层
因为这个错误导致我不能进行源程序的编译好几天了,因此希望能给出好的解决方法。
亚瑟王 发表于 2010-1-7 15:31:24 | 显示全部楼层
编译什么程序?把名称列出来,你是怎么做的也列出来。不然没法解决。
 楼主| yihuan 发表于 2010-1-7 17:16:16 | 显示全部楼层
编译的程序是韦东山书中附带光盘的程序,所以我相信程序及MAKEFILE不会有问题,另外这不是针对某个程序,而是所有的程序都有这个错误,所以我觉得应该是交叉编译工具的问题。
 楼主| yihuan 发表于 2010-1-7 17:19:25 | 显示全部楼层
以其中的一个程序为例,程序如下:
crt0.S:
.text
.global _start
_start:
            ldr     r0, =0x56000010     @ WATCHDOG寄存器地址
            mov     r1, #0x0                     
            str   r1, [r0]              @ 写入0,禁止WATCHDOG,否则CPU会不断重启
            
            ldr     sp, =1024*4         @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K
                                        @ nand flash中的代码在复位后会移到内部ram中,此ram只有4K
            bl      main                @ 调用C程序中的main函数
halt_loop:
            b       halt_loop


以下是LED_KEY.C:
#define GPBCON      (*(volatile unsigned long *)0x56000010)
#define GPBDAT      (*(volatile unsigned long *)0x56000014)

#define GPFCON      (*(volatile unsigned long *)0x56000050)
#define GPFDAT      (*(volatile unsigned long *)0x56000054)

#define GPGCON      (*(volatile unsigned long *)0x56000060)
#define GPGDAT      (*(volatile unsigned long *)0x56000064)

/*
* LED1-4对应GPB5、GPB6、GPB7、GPB8
*/
#define GPB5_out        (1<<(5*2))
#define GPB6_out        (1<<(6*2))
#define GPB7_out        (1<<(7*2))
#define GPB8_out        (1<<(8*2))

/*
* K1-K4对应GPG11、GPG3、GPF2、GPF0
*/
#define GPG11_in    ~(3<<(11*2))
#define GPG3_in     ~(3<<(3*2))
#define GPF2_in     ~(3<<(2*2))
#define GPF0_in     ~(3<<(0*2))

int main()
{
        unsigned long dwDat;
        // LED1-LED4对应的4根引脚设为输出
        GPBCON = GPB5_out | GPB6_out | GPB7_out | GPB8_out ;

        // K1-K2对应的2根引脚设为输入
        GPGCON = GPG11_in & GPG3_in ;
        
        // K3-K4对应的2根引脚设为输入
        GPFCON = GPF2_in & GPF0_in ;

        while(1){
            //若Kn为0(表示按下),则令LEDn为0(表示点亮)
            dwDat = GPGDAT;             // 读取GPG管脚电平状态
        
            if (dwDat & (1<<11))        // K1没有按下
                GPBDAT |= (1<<5);       // LED1熄灭
            else   
                GPBDAT &= ~(1<<5);      // LED1点亮
               
            if (dwDat & (1<<3))         // K2没有按下
                GPBDAT |= (1<<6);       // LED2熄灭
            else   
                GPBDAT &= ~(1<<6);      // LED2点亮
   
            dwDat = GPFDAT;             // 读取GPF管脚电平状态
            
            if (dwDat & (1<<2))         // K3没有按下
                GPBDAT |= (1<<7);       // LED3熄灭
            else   
                GPBDAT &= ~(1<<7);      // LED3点亮
   
            if (dwDat & (1<<0))         // K4没有按下
                GPBDAT |= (1<<8);       // LED4熄灭
            else   
                GPBDAT &= ~(1<<8);      // LED4点亮
    }

    return 0;
}


以下是MAKEFILE:
key_led.bin : crt0.S  key_led.c
        arm-linux-gcc -g -c -o crt0.o crt0.S
        arm-linux-gcc -g -c -o key_led.o key_led.c
        arm-linux-ld -Ttext 0x0000000 -g  crt0.o key_led.o -o key_led_elf
        arm-linux-objcopy -O binary -S key_led_elf key_led.bin
        arm-linux-objdump -D -m arm  key_led_elf > key_led.dis
clean:
        rm -f   key_led.dis key_led.bin key_led_elf *.o


我的做法很简单,cd到该目录下make即出现了上述错误。
亚瑟王 发表于 2010-1-9 14:57:28 | 显示全部楼层
汇编不支持EABI的编译器,你使用3.4.5的编译器编译就没问题了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-10-6 22:19 , Processed in 1.033137 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表