Ich versuche, eine ruby native Erweiterung zu erstellen, aber wenn ich rake
ausführen, die ext/example_project/extconf.rb
verwendet, um mein Projekt zu erstellen und meine Tests unter test/
auszuführen, erhalte ich den folgenden Fehler, wenn die Tests ausgeführt werden:ruby nativen Erweiterung: undefined Symbol
./home/jbuesking/.rbenv/versions/2.3.0/bin/ruby: symbol lookup error:
/home/jbuesking/repositories/example_project/lib/example_project/example_project.so: undefined symbol: some_function
ich bin mir ziemlich sicher sind meine Dateien nicht korrekt verbunden ist und dass ich meine extconf.rb
und/oder Rakefile
in irgendeiner Weise zu ändern, aber ich bin nicht sicher, wie.
Ich habe ein einfaches Repository erstellt, das das Problem over on GitHub zeigt. Es wird mit demselben Fehler fehlschlagen, wenn Sie es klonen und rake
aus dem Projektstamm ausführen.
Einige zusätzliche Informationen:
- verwendete ich die Ruby Gem
hoe
das Projekt übersow example_project
- Die Fehler-Funktion eine Funktion im Unterverzeichnis
ext/example_project/c_example_project
definiert aufzurufen versucht, zu erstellen. Mein aktuelles Projekt verwendet ein git-Submodul aus dem Verzeichnisext/example_project
, das wiederum das Submodul als Unterverzeichnis einrichtet. Das Submodul ist ein c-Projekt mit einer abgeflachten Struktur (alle Dateien im Stammverzeichnis). Hinweis: Diese Formulierung kann verwirrend sein, aber der entscheidende Punkt ist, dass es ein verschachteltes c-Projekt gibt, das unterext/example_project/c_example_project
definiert ist und Methoden enthält, die ich aufrufen möchte.
Lassen Sie mich wissen, wenn eine Klärung erforderlich ist, und ich werde mein Bestes tun, um es zu liefern.
Nur ein Follow-up, wenn es etwas Besseres als 'Hacke' dafür gibt, lass es mich wissen. Ich war [ein Tutorial] (https://tenderlovemaking.com/2009/12/18/writing-ruby-c-extensions-part-1.html) als Startpunkt, aber es ist 7 Jahre alt, also vielleicht etwas besseres Komm seither mit! – JesseBuesking