2013-10-24 23 views
9

Neden .c programını derledikten sonra bir hata iletisi alıyorum.Bir .C dosyası derleniyor: Mimari için tanımlanmamış semboller x86_64

11 uyarı oluşturuldu. dan başvurulan "_main",: mimari x86_64 için Tanımsız semboller örtülü girişi/başlatmak ana çalıştırılabilir ld için: mimari x86_64 clang bulunamadı sembolü (ler): Hata: bağlayıcı komut çıkış kodu 1 (kullanımı ile başarısız oldu - v görmek için çağırma)

Benim date.c:

#include "date.h" 
#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 

struct date { 
    char *day; 
    char *month; 
    char *year; 
}; 

/* 
* date_create creates a Date structure from `datestr` 
* `datestr' is expected to be of the form "dd/mm/yyyy" 
* returns pointer to Date structure if successful, 
*   NULL if not (syntax error) 
*/ 
Date *date_create(char *datestr) { 
    Date *d = (Date *)malloc(sizeof(Date)); 
    const char delimiter[2] = "/"; 
    char *token; 

    if (d != NULL) { 
    token = strtok(datestr, delimiter); 
    d->day = *token; 
    token = strtok(NULL, delimiter); 
    d->month = *token; 
    token = strtok(NULL, delimiter); 
    d->year = *token; 
    } 
}; 

/* 
* date_duplicate creates a duplicate of `d' 
* returns pointer to new Date structure if successful, 
*   NULL if not (memory allocation failure) 
*/ 
Date *date_duplicate(Date *d) { 
    return NULL; 
}; 

/* 
* date_compare compares two dates, returning <0, 0, >0 if 
* date1<date2, date1==date2, date1>date2, respectively 
*/ 
int date_compare(Date *date1, Date *date2) { 
    return 0; 
}; 

/* 
* date_destroy returns any storage associated with `d' to the system 
*/ 
void date_destroy(Date *d) { 

}; 

Bash çıkışı:

bash-3.2$ gcc -W -Wall date.c 
date.c:25:12: warning: incompatible integer to pointer conversion assigning to 
     'char *' from 'char'; remove * [-Wint-conversion] 
    d->day = *token; 
     ^~~~~~~ 
date.c:27:14: warning: incompatible integer to pointer conversion assigning to 
     'char *' from 'char'; remove * [-Wint-conversion] 
    d->month = *token; 
      ^~~~~~~ 
date.c:29:13: warning: incompatible integer to pointer conversion assigning to 
     'char *' from 'char'; remove * [-Wint-conversion] 
    d->year = *token; 
      ^~~~~~~ 
date.c:37:44: warning: format specifies type 'void *' but the argument has type 
     'char' [-Wformat] 
    printf("Day: %p Month: %p Year: %p\n", *d->day, *d->month, *d->year); 
       ~~      ^~~~~~~ 
       %c 
date.c:37:53: warning: format specifies type 'void *' but the argument has type 
     'char' [-Wformat] 
    printf("Day: %p Month: %p Year: %p\n", *d->day, *d->month, *d->year); 
          ~~      ^~~~~~~~~ 
          %c 
date.c:37:64: warning: format specifies type 'void *' but the argument has type 
     'char' [-Wformat] 
    printf("Day: %p Month: %p Year: %p\n", *d->day, *d->month, *d->year); 
            ~~       ^~~~~~~~ 
            %c 
date.c:40:1: warning: control reaches end of non-void function [-Wreturn-type] 
}; 
^ 
date.c:47:28: warning: unused parameter 'd' [-Wunused-parameter] 
Date *date_duplicate(Date *d) { 
         ^
date.c:55:24: warning: unused parameter 'date1' [-Wunused-parameter] 
int date_compare(Date *date1, Date *date2) { 
        ^
date.c:55:37: warning: unused parameter 'date2' [-Wunused-parameter] 
int date_compare(Date *date1, Date *date2) { 
            ^
date.c:62:25: warning: unused parameter 'd' [-Wunused-parameter] 
void date_destroy(Date *d) { 
         ^
11 warnings generated. 
Undefined symbols for architecture x86_64: 
    "_main", referenced from: 
    implicit entry/start for main executable 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
+0

da aşırı dererencing hakkında bu uyarılar düzeltmek ve yerine i kodundan silinen% p – user1937198

+0

ait karakter için% c kullanmak isteyebilirsiniz. Yine de teşekkürler. – chuckfinley

cevap

13

birgerekişlevi date.c'da çalışır. Veya şu anda bağlantı vermek ve ana işlevi daha sonra bağlamak için -c ile derleyebilirsiniz.

İlgili konular