2013-08-27 4 views
0

Hier, mon ami et moi avons mis en place nos environnements de dev pour commencer à travailler sur une tâche d'école. Notre professeur nous a donné un code d'assemblage pour compiler et lier avec notre propre code C pour remplacer un programme de démarrage Linux. Cependant, pour une raison quelconque, le code compilera complètement sur la machine de mes amis, mais me donne un tas d'erreurs de compilation. Ce code a été donné par le professeur, donc je sais que cela doit être correct. Nous avons vérifié notre version bcc et ils sont identiques. Voici la sortie d'erreur:Compilation des problèmes avec la compatibilité bcc

comiling ...... 
main.c:17.5: error: need '{' 
main.c:17.7: error: chars undeclared 
main.c:19.12: error: illegal indirection 
main.c:20.15: error: illegal indirection 
main.c:25.4: error: bad expression 
main.c:25.10: error: need ';' 
main.c:25.15: error: blk undeclared 
main.c:25.19: error: buf undeclared 
main.c:25.3: error: need ';' 
main.c:25.4: error: bad expression 
main.c:25.7: error: need ';' 
main.c:25.4: error: bad expression 
main.c:30.4: error: bad expression 
main.c:30.9: error: need ';' 
main.c:30.10: error: temp undeclared 
main.c:30.14: error: illegal indirection 
main.c:33.1: error: need ';' 
main.c:eof: error: need '}' 
linking ....... 
ld86: cannot open input file main.o 
check a.out size 
ls: cannot access a.out: No such file or directory 
dump a.out to a VIRTUAL FD 
dd: opening ‘a.out’: No such file or directory 

Cela a été généré en utilisant ce script shell:

#!/bin/bash 

echo comiling ...... 
as86 -o bs.o bs.s 
bcc -c -ansi main.c 

echo linking ....... 
ld86 -d bs.o main.o /usr/lib/bcc/libc.a 
echo check a.out size 
ls -l a.out 

echo dump a.out to a VIRTUAL FD 
dd if=a.out of=mtximage.bin bs=1024 count=1 conv=notrunc 

Et enfin là est le main.c qu'il compile des erreurs sur:

/******************************************************* 
*     @main.c file       * 
*******************************************************/ 
typedef unsigned char u8; 
typedef unsigned short u16; 
typedef unsigned long u32; 

#include "ext2.h" 
typedef struct ext2_group_desc GD; 
typedef struct ext2_inode  INODE; 
typedef struct ext2_dir_entry_2 DIR; 

#define BLK 1024 

char buf1[BLK], buf2[BLK]; 

int prints(chars *s) 
{ 
    while(*s) 
    putc(*s++); 


} 

u16 getblk(u16 blk, char *buf) 
{ 
    readfd(blk/18, ((blk*2)%36)/18, ((blk*2)%36)%18, buf); 
} 

char temp[256]; 

main() 
{ 
    u16 i,iblk; 
    char c; 
    GD *gp; 
    INODE *ip; 
    DIR *dp; 

    prints("read decsriptor block #2 into buf1[]\n\r"); 
    getblk(2, buf1); 
    gp = (GD *)buf1; 
    iblk = (u16)gp->bg_inode_table; 
    prints("inodes blk = "); putc(iblk + '0'); prints("\n\r"); 

    getblk((u16)iblk, buf1); // read first inode block block 
    ip = (INODE *)buf1 + 1; // ip->root inode #2 

    prints("read 0th data block of root inode into buf2[ ]\n\r"); 

    getblk((u16)ip->i_block[0], buf2); 
    dp = (DIR *)buf2;   // buf2 contains DIR entries 

    while((char *)dp < &buf2[BLK]){ 



    c = dp->name[dp->name_len]; 
    dp->name[dp->name_len] = 0; 
    prints(dp->name); putc(' '); 
    dp->name[dp->name_len] = c; 

    dp = (DIR *)((char *)dp + dp->rec_len); 
    } 

    prints("\n\rgo?"); getc(); 
} 

Répondre

3
int prints(chars *s) 

      ^looks bad 
+1

+1, et je ne crois pas que «le même code se compilera complètement» sur la machine d'un ami OP. –

+0

lol je viens de le voir dans mon code et était sur le point de répondre à ma propre question .. haha ​​merci –

Questions connexes