GCC链接.o文件

时间:2017-07-10 22:49:43

标签: c gcc compiler-errors linker object-files

我正在尝试编译我的代码,但它无法正常工作。我得到这个在学校编译,但我不能在我的家用电脑上编译。我似乎无法弄清楚为什么。我需要修复此错误才能继续我的作业。此外, 此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

任何想法/解决方案?

1 个答案:

答案 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