2017-03-05 4 views
0

Ich versuche, eine Quelle mit einer .SO-Datei libfoo.so zu kompilieren. Die einzige Sache in dieser Bibliothek ist eine Funktion, die nur eine Zahl zurückgibt (yeah, ich weiß, fortgeschrittene Sachen). Die Entsprechung der Header-Datei (ich hatte beide, aber ich soll nur die .so verwenden) heißt foo.h und die Funktion heißt int foo().Wie kompiliere ich eine Datei mit einer gemeinsamen Bibliothek?

Meine Quelldatei ist main.c:

#include <stdio.h> 

#include "foo.h" 

int main() 
{ 
    int x = foo(); 

    printf("%d", x); 

    return 0; 
} 

, Nun, wenn ich versucht, die folgenden Befehle zu kompilieren:

gcc -Wall -fPIC -c main.c -o main.o 

gcc -Wall -fPIC main.o -o main -lfoo -L. 

Der erste Befehl schlägt fehl, die Objektdatei, die Ausgabe des folgenden Fehler zu erstellen :

fatal error: foo.h: No such file or directory 

Ich benutze Ubuntu 16.04.

Ich habe auch versucht, den aktuellen Speicherort zu LD_LIBRARY_PATH zu exportieren, wie ich auf einige andere Antworten vorgeschlagen habe.

export LD_LBIRARY_PATH=$LD_LIBRARY_PATH:machine/Desktop/lib_test 
+1

Wo befindet sich 'foo.h' und was tun Sie, um Ihrem Compiler mitzuteilen, wo Sie es finden können? – Biffen

Antwort

0

Sie müssen die Schnittstellendefinition aus der .h-Datei und die Datei Muss haben auf dem Suchpfad enthalten im aktuellen Verzeichnis oder ein Verzeichnis sein.

Beachten Sie, dass auf manchen Systemen Dateinamen und Pfade fallabhängig sind.

Verwandte Themen