Ich habe eine Bibliothek, die ich verwenden möchte. Ich habe nicht den Quellcode dafür, aber es enthält eine Funktion, die ich gerne verwenden würde. Es ist ein normales gemeinsames x86-64-Objekt mit etwas JNI-Code und nichts Besonderes. Mein Problem ist jetzt, dass die Bibliothek auf libm.so
verweist. Was jetzt passiert, ist ziemlich seltsam und ich habe es nicht erwartet. Wenn ich versuche, es auszuführen, sagt es mir, dass libm.so
einen ungültigen ELF-Header hat, was sinnvoll ist, weil libm.so
nur eine Referenzdatei zu libm.so.6
ist, die die tatsächliche Bibliotheksdatei ist.Linux Shared Object Library Verknüpfung
Jetzt ist meine Frage, wie man das korrigieren? Ich bin wirklich überrascht, dass das Betriebssystem das nicht richtig beherrscht, da jedes Programm sich auf libm.so
und nicht auf libm.so.6
bezieht, da es zumindest etwas versionsunabhängig sein sollte.
EDIT: Ich habe ein strace
und libm.so
nur die Spitze des Eisbergs zu sein scheint ... Meine Bibliothek ist mit vielen gängigen Standardbibliotheken von Linux verweisen. Und da ich es in der JRE ausführe, sucht es nur im Verzeichnis der JRE und das ist natürlich völlig falsch. Und da die Bibliothek von einer Android-App stammt, hatte das ursprüngliche Makefile wahrscheinlich auch Pfade für die Bibliotheken, die keinen Sinn ergeben ... müssen noch mehr Analysen für diese Frage machen, um sie zu lösen.
Eine Bibliothek, die eine symbolische Verknüpfung zu einer tatsächlichen Datei darstellt, funktioniert wie jede andere symbolische Verknüpfung. Es muss ein anderes Problem geben, das den Fehler verursacht. Wie für den Fehler, können Sie bitte kopieren Sie den tatsächlichen Fehler, vollständig und unbearbeitet, und zeigen Sie es im Fragenkörper? Möglicherweise wird auch die für die Verknüpfung verwendete Befehlszeile angezeigt (es ist die Verknüpfung, die fehlschlägt? Oder schlägt es fehl, wenn Sie versuchen, Ihr Programm auszuführen?). –