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();
}
+1, et je ne crois pas que «le même code se compilera complètement» sur la machine d'un ami OP. –
lol je viens de le voir dans mon code et était sur le point de répondre à ma propre question .. haha merci –