我试图编译我的代码,但它不工作。我得到这个在学校编译,但我不能编译我的家用电脑。我似乎无法弄清楚为什么。我需要修正这个错误才能继续我的任务。此外,这个list.o文件是profs文件。我必须使用这个文件。我是一名管理我的linux的初学者。请和我一起裸照。GCC与.o文件链接
我试过的解决方案有点类似? 我已经将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"
`
任何想法/解决方案?非常感谢你!
我的猜测是'list.o'编译时没有'-fPIC',混合对象有和没有这个标志不是一个好主意。尝试重新编译_without_该标志。 – rodrigo
@rodrigo谢谢你的回复!我忘了提及,我也曾尝试在没有-fPIC的情况下进行编译。它仍然无法工作。 gcc -m64 -pthread -Wall -std = c99 -o运行main.o as2.o list.o /usr/bin/ld:list.o:重定位R_X86_64_32S针对未定义的符号 – elam
嗯,您添加的行编辑不会编译任何东西,它正在链接。您可以尝试编译并链接所有文件,而不使用-fPIC,以防万一... – rodrigo