繁体   English   中英

编译 .C 文件:体系结构 x86_64 的未定义符号

[英]Compiling a .C file: Undefined symbols for architecture x86_64

出于某种原因,我在编译 .c 程序后收到一条错误消息。

生成了 11 个警告。 体系结构 x86_64 的未定义符号:“_main”,引用自:主可执行文件的隐式入口/启动 ld:找不到体系结构 x86_64 的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

我的日期.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)

您需要date.cmain函数。 或者你可以只用-c编译,此时不链接,稍后链接主函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM