2016-03-29 6 views
2

verwenden Ich möchte einige Funktionen von einer gemeinsamen Bibliothek unter Linux verwenden. Ich konnte keine aktuelle Dokumentation finden. Nach dem Lesen this habe ich folgendes versuchtJ-Schnittstelle zu C shared libraries auf linux (dll)

load 'dll' 
    '/lib64/libc.so putchar i i' cd <65 
|domain error: cd 
| '/lib64/libc.so putchar i i' cd<65 
    '/lib64/libc.so atoi i *c' cd <'22' 
|domain error: cd 
| '/lib64/libc.so atoi i *c' cd<'22' 

Wo ist der Fehler?

+0

Welche J-Version? – Eelvex

+0

Die letzte - j64-804 – user3165667

+2

führen Sie Ihre Befehle erneut, dann führen Sie 'cder''' und' cderx''' und lesen [diese] (http://www.jsoftware.com/help/user/cd_domain_error.htm). Aktualisieren Sie auch Ihre Frage mit der Ausgabe der obigen Befehle –

Antwort

1

Es scheint, J symbolische Links nicht folgen, die folgenden Werke richtig:

'/lib64/libc-2.20.so putchar c i' cd <65 
A┌─┬──┐ 
│A│65│ 
└─┴──┘ 

Wo /lib64/libc-2.20.so ist die Bibliothek, auf die die libc.so.6 Link verweist.

PS. Danke @Danylo Dubinin für die cder'' und cderx'' Tipps! :)

UPDATE: Es ist peinlich: /lib64/libc.so ist nicht eine gemeinsam genutzte Bibliothek, sein ein „GNU ld Skript“ aber /lib64/libc.so.6 ist ein Link zu einer gemeinsam genutzten Bibliothek, die J korrekt folgt, so dass ich nur den falschen Pfad angeben ... eh

+1

Ich bin mir nicht sicher, ob das erklärt. Dieser Befehl funktioniert gut für mich, wenn ich ihn auf '/ lib/x86_64-linux-gnu/libc.so.6' lege, was eine symbolische Verbindung zu'/lib/x86_64-linux-gnu/libc-2.19.so' ist. Und wenn ich eine zweite symbolische Verbindung zu '/ lib/x86_64-linux-gnu/libc.so.6' in meinem Home-Verzeichnis erstelle und stattdessen aufrufe, funktioniert der Befehl weiterhin einwandfrei. – Tikkanz

+0

Ich bin froh, dass meine Kommentare Ihnen geholfen haben, das Problem zu lösen. [unix.stackexchage] (http://unix.stackexchange.com) ist ein guter Ort, um Unix-bezogene Probleme zu suchen. Ich habe viele nützliche Informationen zu Ihrem Problem in [diesem Thema] gefunden (http://unix.stackexchange.com/questions/120380/). Als Faustregel gilt: 'man' Seiten um zu helfen. Versuchen Sie auch 'ldd/bin/ls' oder ein anderes Standard-Unix-Dienstprogramm - Sie werden immer finden, wie die C-Bibliothek aufgerufen wird :) –

Verwandte Themen