Ich denke, C ist die stärkste plattformübergreifende Sprache. iOS kann in Objective-C auch die Sprache C verwenden. Android kann also auch C-Sprache mit NDK verwenden Ich dachte, wenn die gesamte Logik außer der Benutzeroberfläche in C-Sprache geschrieben wäre, könnte sie auf allen Plattformen verwendet werden. Mit FireFoxOS konnte ich dies jedoch nicht tun und ich konnte die C-Sprache nicht in Form des Aufrufs der grundlegenden JavaScript-API verwenden.
Ich war am Ende meiner Enttäuschung Emscripten war einer der Durchbrüche! !! !! !!
Emscripten ist ein Compiler, der LLVM aus der C / C ++ - Sprache generiert und in JavaScript konvertiert. Es unterstützt auch eine Standard-C-Sprachbibliothek und einen Teil von POSIX, und es scheint, dass OpenGL ES 2.0 auch verwendet werden kann. Emscripten selbst ist unten. https://github.com/kripken/emscripten
Aktiviert die Verwendung von emscripten.
Ich habe verschiedene Dinge ausprobiert, aber die Installation des SDK war am einfachsten.
Als Verfahren, http://kripken.github.io/emscripten-site/docs/building_from_source/building_emscripten_from_source_using_the_sdk.html#building-emscripten-from-source-using-the-sdk Sie können tun, wie in geschrieben.
Wenn Sie die Prozedur schreiben https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-portable.tar.gz Holen Sie sich den Quellcode von.
Weil ich CMake benutze
python
$ brew install cmake
Bitte. Nach dem Entpacken des Codes
python
$ cd emsdk_portable
$ ./emsdk install sdk-incoming-64bit
$ ./emsdk activate sdk-incoming-64bit
Du kannst es schaffen. Es scheint also Knoten und Python für die Ausführung zu verwenden
python
$ brew install node
Und Erstellen Sie anschließend einen symbolischen Link zu python2
python
$ sudo ln -s /usr/bin/python2.7 /usr/bin/python2
python
$ emsdk_portable/emscripten/incoming/emcc first.c -o first.js
Dann können Sie es in JS konvertieren. (Es kann besser sein, es in PATH in emsdk_portable / emscripten / incoming / zu setzen.)
Zum Beispiel
first.c
#include <stdio.h>
int
main(void)
{
printf("Hello, World!\n");
return 0;
}
Wenn
python
$ emcc first.c -o first.js
$ node first.js
Hello, World!
Es wird sein.
Zum Beispiel
second.c
int
add(int x, int y)
{
return x + y;
}
Ich möchte die Funktion von außerhalb von JavaScript aufrufen. Zu diesem Zeitpunkt, wenn js konvertiert wird,
python
$ emcc second.c -s EXPORTED_FUCTIONS="['_add']" -o second.js
Geben Sie die Funktion an, die in EXPORTED_FUCTIONS veröffentlicht werden soll, und lösen Sie sie aus. Fügen Sie zuerst "_" zum Funktionsnamen hinzu. Danach ist es möglich, es mit ccall von js Seite aufzurufen. Es wird in Form von ccal verwendet (Funktionsname, Rückgabetyp, [Argumenttyp], [tatsächliches Argument]).
second.html
<html>
<body>
<div id="output"></div>
<script type="text/javascript" src="./second.js"></script>
<script type="text/javascript">
var num = ccall("add", "number", ["number", "number"], [1, 2]);
document.getElementById("output").innerHTML = num;
</script>
</body>
</html>
Dies gibt 3 an das div aus. Sie können auch Module.cwrap verwenden, um die Funktion abzurufen. Module.cwrap (Funktionsname, Rückgabetyp, [Argumenttyp]) Sie können die Funktion in Form von abrufen.
second2.html
<html>
<body>
<div id="output"></div>
<script type="text/javascript" src="./second.js"></script>
<script type="text/javascript">
//Extrahieren Sie eine Funktion namens add
var add = Module.cwrap("add", "number", ["number", "number"]);
//Verwenden Sie die extrahierte Funktion
var num = add(1, 2);
document.getElementById("output").innerHTML = num;
</script>
</body>
</html>
Wieder wird 3 an das div ausgegeben.
Wenn Sie dagegen JS aus C-Code aufrufen,
python
mergeInto(LibraryManager.library, {
//Definition der von C aufgerufenen Methode
});
Wird genutzt.
Zum Beispiel
thirdlib.js
mergeInto(LibraryManager.library, {
jsPower: function(x) {
return x * x;
}
});
Mit einer JavaScript-Datei namens
third.c
#include <stdio.h>
#include <math.h>
int jsPower(int x); //JavaScript-Funktionen
int
pythagorean(x, y)
{
//Berechnen Sie mit der JavaScript-Funktion jsPower
return sqrt(jsPower(x) + jsPower(y));
}
int
main(void)
{
printf("%d\n", pythagorean(3,4));
return 0;
}
Bereiten Sie eine C-Sprachdatei mit dem Namen vor. Geben Sie daher den JS-Code mit der Option --js-library an, kompilieren Sie ihn und führen Sie ihn aus.
python
$ emcc third.c --js-library thirdlib.js -o third.js
$ node thired.js
5
Der JS-Code wird ordnungsgemäß aufgerufen und berechnet.
Von hier an, EMSCRIPTEN_BINDINGS kann in C ++ verwendet werden. Wenn Sie es hier registrieren, können Sie die Funktion mit Module.xxx aufrufen.
firstcpp.cpp
#include "emscripten/bind.h"
using namespace emscripten;
int
add(int x, int y)
{
return x + y;
}
EMSCRIPTEN_BINDINGS(my_module) {
function("add", &add);
}
Kompilieren Sie wie folgt (em ++, weil es C ++ ist)
python
$ em++ firstcpp.cpp -o firstcpp.js -std=c++0x --bind
Verwenden der Dateiausgabe als
firstcpp.html
<html>
<body>
<div id="output"></div>
<script type="text/javascript" src="./firstcpp.js"></script>
<script type="text/javascript">
var num = Module.add(1, 2);
document.getElementById("output").innerHTML = num;
</script>
</body>
</html>
In diesem Fall wird 3 ausgegeben.
Ich werde das auch tun.
Recommended Posts