【问题标题】:Makefile DependiciesMakefile 依赖项
【发布时间】:2016-09-14 20:15:21
【问题描述】:

我需要帮助创建一个 Makefile。

我的文件:

g.c

v.h

v.c

main()在g.c里面,里面包含v.h

我的 Makefile 如下所示:

all: bin/v bin/g

bin/v: v.c
    cc v.c -o bin/v -Wall

bin/g: g.c
    cc g.c -o bin/g -D_REENTRANT -lpthread -Wall

PHONY: all

运行 make all 时,出现大量错误:

重定位 X 的符号索引 Y 无效

紧随其后

/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o:在函数`_start'中:

(.text+0x20): 对 `main' 的未定义引用 collect2:错误:ld 返回 1 个退出状态

我的 Makefile 应该是什么样的?

提前致谢!

【问题讨论】:

    标签: c linux makefile


    【解决方案1】:

    因为你在做的时候试图生成一个可执行文件

    bin/v: v.c
        cc v.c -o bin/v -Wall
    

    你需要给标志 -c 来编译,因为 v.c 不包含任何 main 这就是链接器给出错误的原因。 通俗地说, 当需要生成可执行文件时,链接器和加载器会进入编译过程

    【讨论】:

    • 谢谢!这解决了其中一个问题,这使我能够解决我的 makefile 中的其他问题。现在一切都很好:D
    【解决方案2】:

    我不知道您为什么会收到此链接器/加载程序错误,可能是您没有提到 v.hv.c 但这是您的 Makefile 应该看起来像我曾经使用过一次的示例。

    假设您有一个目录名称folder,并且您已将所有文件main.c , v.h and v.c 放在该目录中。然后在该目录中创建一个名为 Makefile 的文件。 Makefile 的内容应该如下

    all: main.out 
    
    main.out: main.c v.o
          gcc -o main.out main.c v.o
    
    v.o:   v.c v.h
         gcc -c v.c 
    
    clean: 
         rm -rf main.out *.o 
    

    【讨论】:

      猜你喜欢
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-27
      • 2013-05-28
      • 2012-09-28
      • 2018-04-05
      • 1970-01-01
      相关资源
      最近更新 更多