2017-01-13 3 views
-1

Ich plane die Verwendung einer C++ - Bibliothek für eine Webanwendung und Web-Assembly schien ein gutes Werkzeug dafür. Ich benutze emscripten um es zu kompilieren.Web-Assembly: mit emscripten mit C++ - Bibliothek

bekam ich den Quellcode dieser Open-Source-C++ Library und machte es mit emmake machen und emmake make install .a Bibliotheken in meinem /usr/local/<name of open source>/lib sowie Header-Dateien hatte

Nach diesen zwei Anrufe I in meinem /usr/local/<name of open source>/include

Ich hatte auch ein Beispiel cpp-Code, der diese Open-Source-Bibliothek verwendet.

Die Frage ist: Wie erstelle ich eine HTML-Datei für diese CPP-Datei? Der Name dieser Datei ist „test.cpp“ und ich versuchte, diesen Befehl, aber es ist eine Menge „nicht aufgelöste Symbole“ verursachen

em++ -I/usr/local/<name of open source>/include -L/usr/local/<name of open source>/lib test.cpp -s WASM=1 -o final.html 

Dann rief ich emrun einen Web-Server auf meinem lokalen zu laufen, aber final.html zeigt nicht an, was ich erwartet habe.

Können Sie mir bitte helfen?

unresolved symbol warnings in the console

+0

Dies scheint WebAssembly nicht spezifisch zu sein. Kannst du Emscriptens regulärer Asm folgen?js Anweisungen und sehen, ob Sie die gleichen Fehler bekommen? Wenn ja, was sind diese Fehler? Können Sie */usr/local 'nicht benutzen? Emscripten hat eigene C- und C++ - Standardbibliotheken. –

+0

Hallo, es ist keine Standard-Bibliothek, die ich verwenden möchte. Es ist ein Open-Source-Projekt, das von Entwicklern entwickelt wurde, um intensive Berechnungen für die wissenschaftliche Forschung durchzuführen. Außerdem habe ich versucht, Emscriptens regulären asm.js Anweisungen zu folgen, aber es schien auch nicht zu funktionieren. –

+0

JF Bastien: Sie erwähnen "Emscripten hat seine eigenen C und C++ Standard-Bibliotheken". Könnten Sie das weiter ausführen? Tnx – backspaces

Antwort

0

Es sieht aus wie Ihre Bibliothek Abhängigkeiten haben können, die nicht erfüllt werden (die ungelösten Symbole). Ein emscripten-Build ist ein Cross-Build, dh er kann Ihre installierten Systembibliotheken nicht verwenden. Stattdessen müssen Sie alle Abhängigkeiten mit dem emscripten-Compiler aufbauen. Emscripten hat das unglückliche Verhalten, dass die ungelösten Symbole Warnungen sind (andere Linker betrachten dies als Fehler), aber Ihr Programm wird wahrscheinlich nicht funktionieren, wenn Sie sie haben.

0

Die Warnungen (Fehler, tatsächlich) zeigen, dass Sie die CPP-Dateien der enthaltenen Bibliothek nicht über emscripten kompiliert haben. Neben der Datei test.cpp müssen Sie jede Datei, die Ihr Projekt benötigt, dem Befehl em ++ bereitstellen. Lesen Sie here für weitere Informationen zu diesem Thema.

Nun zu dem anderen Teil Ihrer Frage kommt, wird emscripten nur eine JS-Funktion für die C++ - Funktionen erstellen, die Sie "aussetzen". (Offensichtlich werden auch die Funktionen, die von diesen exponierten Funktionen aufgerufen werden, kompiliert, Ruhe wird abgezogen). (: Sie binden an JS Ereignisse Beispiel)

0

Emscripten nicht behandeln ungelöst

Ein kleines Tutorial dies auf das Erreichen können Sie nennen sie von Ihrem eigenen JS-Code here

Sobald Ihre Funktionen ausgesetzt sind, zu finden Symbole als Kompilierfehler aus verschiedenen Gründen.

Wenn Sie Ihr Projekt kompilieren, müssen Sie auch die generierte .a-Bibliothek verknüpfen. Die von Ihnen verwendeten Optionen -I und -L geben an, wo nach Bibliotheken gesucht werden soll, die mit Ihrem Programm verknüpft werden sollen. Es wird jedoch nicht angegeben, welche Bibliotheken Sie verknüpfen möchten.

Sie müssen die Option -l<name of your library> Ihrem Kompilierbefehl hinzufügen, um anzugeben, dass die Lib mit Ihrem Programm verknüpft werden soll.

Verwandte Themen