Ich versuche, eine static library
mit shared library
zu verknüpfen und diese wirft mir eine Fehlermeldung, recompile with -fPIC
LD: eine gemeinsame Bibliothek zu einer statischen Bibliothek verknüpfen
Hier ist, was ich habe versucht, an einem Beispiel:
[email protected]:~/Junk$ cat common.h
#include <stdio.h>
#include <stdlib.h>
void func1(int *p);
void func2();
Gemeinsam genutzte Bibliothek Code:
[email protected]:~/Junk$ cat shared.c
#include "common.h"
void func2()
{
int i=10;
func1(&i);
}
Und die statische Code-Bibliothek:
#include "common.h"
int k;
void func1(int *p)
{
printf("%d\n", *p);
}
Nun sehen Sie, dass die gemeinsam genutzte Bibliothek die API der statischen Bibliothek verwendet.
Hier ist, wie ich zusammengestellt:
gcc -c static.c
ar rcs libStatic.a static.o
gcc -c shared.c
gcc -shared -fPIC -o libShared.so shared.o -L. -lStatic
Nach dem letzten Befehl, erhalte ich folgende Fehlermeldung:
/usr/bin/ld: ./libStatic.a(static.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
./libStatic.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
Ich habe tatsächlich static library
von einem Anbieter und ich versuche, ein bauen shared library
auf Spitze davon. Ich habe nicht die Quelle der statischen Bibliothek.
ich eine andere Art von Fehler zu sagen:
relocation R_ARM_THM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC
error adding symbols: Bad value
collect2: error: ld returned 1 exit status
ich durch so viele Artikel ging, aber in der Lage konnte nicht herausfinden. Bitte helfen Sie mir, das zu beheben.
Referenzen:
Können wir '-fPIC' für statische Bibliotheken verwenden ?. Jedenfalls habe ich versucht, '-fPIC' zu verwenden, wie in 'gcc -c static.c -fPIC', was den gleichen Fehler verursacht –
Sie müssen alle Ihre Objekte kompilieren, die Teil der lib mit' -fPIC' sind. Also füge es auch zu shared.c hinzu. Haben Sie Ihr '.a' mit dem aktualisierten Objekt neu erstellt? –