Ich versuche meinen Code zu kompilieren, aber es funktioniert nicht. Ich habe das in der Schule kompilieren lassen, aber ich kann das nicht auf meinem Heimcomputer kompilieren. Ich kann nicht herausfinden, warum. Ich brauche diesen Fehler behoben, um meine Aufgabe fortzusetzen. Auch Diese list.o-Datei ist die Profs-Datei. Ich muss diese Datei verwenden. Ich bin ein Anfänger bei der Verwaltung meiner Linux. Bitte nimm mich mit.GCC Verknüpfung mit .o Datei
Lösungen Ich habe es irgendwie versucht? Ich habe gcc auf gcc-7 aktualisiert. Ich habe gelegen libc.a
/usr/lib/x86_64-linux-gnu/libc.a
/usr/share/doc/libklibc/README.klibc.arch
Edit: Ich habe versucht, ohne -fPIC Kompilieren
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...
Das vom Terminal ist: `
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
`
Das ist meine Make-Datei: `
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
`
Das ist mein beinhaltet: `
#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"
`
Irgendwelche Ideen/Lösungen? Vielen Dank!
Meine Vermutung ist, dass 'list.o' ist kompiliert ohne' -fPIC' und Mischen von Objekten mit und ohne dieses Flag ist keine gute Idee. Versuchen Sie, _without_ diese Flagge neu zu kompilieren. – rodrigo
@rodrigo Danke für die Antwort! Ich habe vergessen zu erwähnen, dass ich vorher auch ohne -fPIC kompiliert habe. Es würde immer noch nicht funktionieren. gcc -m64 -pthread -Wall -std = c99 -o laufen main.o as2.o list.o /usr/bin/ld: list.o: Umzug R_X86_64_32S gegen undefinierte symbo – elam
Mmmm, die Zeile, die Sie in der editieren kompiliert nichts, es ist verlinken. Sie können versuchen, alle Ihre Dateien zu kompilieren und zu verknüpfen, ohne '-fPIC', nur für den Fall ... – rodrigo