我需要帮助创建一个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应该是什么样的?
提前致谢!
答案 0 :(得分:3)
我不知道你为什么会收到这个链接器/加载器错误,可能你没有提到v.h
v.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
答案 1 :(得分:1)
因为您正在尝试在执行时生成可执行文件
bin/v: v.c
cc v.c -o bin/v -Wall
你需要提供标志-c才能编译,因为v.c不包含任何主要的链接器给出错误的原因。 通俗地说, 链接器和当然后需要生成可执行文件
时,加载器进入编译的图像