c - GCC 链接.o 文件

标签 c gcc compiler-errors linker object-files

我正在尝试编译我的代码,但它不工作。我在学校得到了这个来编译,但我不能在我的家用电脑上编译它。我似乎无法弄清楚为什么。我需要修复此错误才能继续我的任务。此外,此 list.o 文件是 profs 文件。我必须使用这个文件。

我尝试过的解决方案有哪些? 我已经将 gcc 更新为 gcc-7。 我找到了 libc.a

/usr/lib/x86_64-linux-gnu/libc.a
/usr/share/doc/libklibc/README.klibc.arch

编辑:我试过不使用 -fPIC 进行编译

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...

这是来自终端:

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

这是我的包括:

#include <netinet/in.h> 
#include <sys/socket.h> 
#include <netdb.h>  
#include <unistd.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <pthread.h> 
#include "list.h"
#include "as2.h"

有什么想法/解决方案吗?

最佳答案

编辑: 将拼写从 LFLAGS 更改为 LDFLAGS 以安抚一些评论。

编辑: 移动了 -c 选项以安抚一些评论。

注意:all 通常是 make 文件中的第一个目标。

注意:使用 := 而不是 = 因此宏只会被计算一次。

注意:list.o 已在当前目录中可用(根据 OP 问题),因此未在 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

关于c - GCC 链接.o 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45022824/

相关文章:

c++ - 如何使用 clang 生成类似于 gcc-xml 的元数据输出?

typescript - VS Code 提示错误 TS7013 但 Typescript 不是

c - Haskell二叉树快速实现

c -\n 文件中 EOF 之前的字符导致问题

c - 为什么在正确的文件夹 "/lib"和 "/usr/lib"中链接库(如 pthread)?

c++ - 使用模板类型参数时出错

ios - 我如何解决 IOS 版本 React Native 应用程序中的 EXC_CRASH (SIGABRT) 问题?

c - 在 C 中处理数组嵌套结构的最佳方法

c - 为什么显示超时?

gcc - 间接函数调用使用奇数地址