2013-10-24 116 views
9

由於某種原因,編譯.c程序後出現錯誤消息。編譯.C文件:體系結構x86_64的未定義符號

生成11條警告。 架構x86_64的未定義符號: 「_main」,引用來自: 主可執行文件的隱式條目/開始 架構x86_64未找到ld:symbol(s) clang:錯誤:linker命令失敗,退出代碼1(使用 - v到看到調用)

我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-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

您可能還想修復那些關於過量刪除的警告,並使用%c代替字符而不是%p – user1937198

+0

我從代碼中刪除。不管怎麼說,還是要謝謝你。 – chuckfinley

回答

13

你需要一個main函數date.c。或者你可以用-c來編譯此時不鏈接並在以後連接主函數。

相關問題