我正在尝试编译我的代码,但它无法正常工作。我得到这个在学校编译,但我不能在我的家用电脑上编译。我似乎无法弄清楚为什么。我需要修复此错误才能继续我的作业。此外, 此list.o文件是profs文件。我必须使用此文件。
我尝试过的解决方案? 我已经将gcc更新为gcc-7。 我找到了libc.a
cabal.project
编辑:我尝试过编译而没有-fPIC
/usr/lib/x86_64-linux-gnu/libc.a
/usr/share/doc/libklibc/README.klibc.arch
这是来自终端:
gcc -m64 -pthread -Wall -std=c99 -o run main.o as2.o list.o
/usr/bin/ld: list.o: relocation R_X86_64_32S against undefined symbol...
这是我的make文件:
gcc -m64 -pthread -Wall -std=c99 -fPIC -o run main.o as2.o list.o
/usr/bin/ld: list.o: relocation R_X86_64_32S against undefined symbol `headlist' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
这是我的包括:
CC = gcc
CFLAGS = -m64 -pthread -Wall -std=c99 -fPIC
PROG = run
OBJS = main.o as2.o list.o
run: $(OBJS)
$(CC) $(CFLAGS) -o $(PROG) $(OBJS)
main.o: main.c list.h as2.h
$(CC) $(CFLAGS) -c main.c
as2.o: as2.c as2.h list.h
$(CC) $(CFLAGS) -c as2.c
clean:
rm main.o as2.o run
任何想法/解决方案?
答案 0 :(得分:-1)
编辑:
将拼写从LFLAGS
更改为LDFLAGS
以安抚一些评论。
编辑:
移动-c
选项以安抚一些评论。
注意:all
通常是make文件中的第一个目标。
注意:使用:=
而不是=
,因此宏只会被评估一次。
注意:list.o
已在当前目录中可用(根据OPs问题),因此不会在makefile中编译。但只与其他目标文件链接以生成可执行文件
你的makefile似乎有一些疏忽。建议:
CC := gcc
RM := rm -f
CFLAGS := -ggdb -m64 -pthread -Wall -Wextra -pedantic -std=c99
#LDFLAGS := <-- use the default value
PROG := run
OBJS := main.o as2.o list.o
HDRS := list.h as2.h
.PSEUDO: all clean
all: $(PROG)
$(PROG): $(OBJS)
$(CC) -ggdb -o $(PROG) $(OBJS) $(LDFLAGS)
main.o: main.c $(HDRS)
$(CC) $(CFLAGS) -c main.c -o main.o -I.
as2.o: as2.c $(HDRS)
$(CC) $(CFLAGS) -c as2.c -o as2.o -I.
clean:
$(RM) main.o as2.o run