Dans le développement de projets, nous avons parfois besoin d'appeler certains fichiers de bibliothèque ou fichiers dll écrits en langage C. À l'heure actuelle, nous pouvons utiliser nodejs pour appeler des méthodes C pour y parvenir.
Pour utiliser nodejs pour appeler des fichiers de bibliothèque C, nous devons d'abord comprendre comment écrire des fichiers de bibliothèque C. Ici, nous prenons comme exemple l’écriture d’un simple fichier de bibliothèque d’addition.
Tout d'abord, nous devons créer un fichier c add.c
Le contenu du fichier est le suivant : add.c
,文件内容如下:
#include <stdio.h> int add(int a, int b) { printf("c add function has been called "); return a + b; }
这个 c 文件里只定义了一个函数 add
,接收两个整数参数并返回它们的和。
接下来,我们需要使用编译器将 c 文件编译为动态链接库或者静态链接库。这里以 Linux 系统下的 gcc 编译器为例。
动态链接库编译命令如下:
$ gcc -fPIC -shared -o libadd.so add.c
静态链接库编译命令如下:
$ gcc -c add.c $ ar rcs libadd.a add.o
这里的 -fPIC
参数是让编译器生成位置无关代码,以便能够在不同的进程地址空间中正确地共享代码段。生成的动态链接库或者静态链接库文件分别是 libadd.so
和 libadd.a
。
有了 c 的库文件后,我们就可以在 nodejs 中调用这个库文件里的函数了。这里以 Linux 系统下的 nodejs 为例。
Node.js 的 ffi 模块可以使用外部动态库、静态库和 C 库函数。但是在新的 Node.js 版本中,该模块可能会出现问题。如果我们需要使用更加稳定的 ffi 模块,我们可以选择使用 ffi-napi 模块,在进程中调用 C 库。
我们可以在项目中使用以下命令安装 ffi-napi 模块:
$ npm install ffi-napi
接下来,我们需要创建一个 nodejs 文件 app.js
,文件内容如下:
const ffi = require('ffi-napi'); const libadd = ffi.Library('./libadd', { 'add': ['int', ['int', 'int']] }); console.log(libadd.add(1, 2));
这里需要注意,Library()
函数的第一个参数是 c 库文件的路径,不同平台下的文件名后缀也可能不一样。第二个参数是一个对象,其中包含要导入的函数的名称和参数类型,这里我们导入了 add
函数,并指定了其参数类型和返回值类型。
最后我们调用了 add
$ node app.js
add</ est définie dans. ce code de fichier c>, prend deux paramètres entiers et renvoie leur somme. <h3></h3>2. Compilez le fichier c<p></p>Ensuite, nous devons utiliser un compilateur pour compiler le fichier c dans une bibliothèque de liens dynamiques ou une bibliothèque de liens statiques. Ici, nous prenons comme exemple le compilateur gcc sous le système Linux. <p></p>La commande de compilation de la bibliothèque de liens dynamiques est la suivante : <h2><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:bash;toolbar:false;'>c add function has been called
3</pre><div class="contentsignin">Copier après la connexion</div></div>La commande de compilation de la bibliothèque de liens statiques est la suivante : <p>rrreee</p>Le paramètre <code>-fPIC
ici permet au compilateur de générer du code indépendant de la position. afin qu'il puisse être traité à différentes adresses de processus. Partagez correctement les extraits de code dans l'espace. Les fichiers de bibliothèque de liens dynamiques ou de bibliothèque de liens statiques générés sont respectivement libadd.so
et libadd.a
. app.js
avec. le contenu suivant : 🎜rrreee🎜Il convient de noter ici que le premier paramètre de la fonction Library()
est le chemin d'accès au fichier de la bibliothèque c, et le suffixe du nom de fichier peut être différent selon les plates-formes. Le deuxième paramètre est un objet contenant le nom et les types de paramètres de la fonction à importer. Ici, nous importons la fonction add
et spécifions son type de paramètre et le type de valeur de retour. 🎜🎜Enfin, nous avons appelé la fonction add
et imprimé le résultat de retour. 🎜🎜3. Exécutez le programme🎜🎜Nous pouvons entrer la commande suivante dans la ligne de commande pour exécuter le programme nodejs :🎜rrreee🎜Les résultats de sortie sont les suivants :🎜rrreee🎜Résumé🎜🎜L'utilisation de nodejs pour appeler les fichiers de la bibliothèque C peut grandement améliore l'efficacité du développement du projet et offre en même temps plus de possibilités de développement aux développeurs nodejs. Les étapes de base peuvent être résumées comme suit : 🎜🎜🎜Écrivez un fichier de bibliothèque en langage C et compilez-le dans une bibliothèque dynamique ou une bibliothèque statique. 🎜🎜Utilisez le module ffi-napi pour importer des fonctions dans la bibliothèque c. 🎜🎜Appelez les fonctions importées dans nodejs pour le développement. 🎜🎜🎜L'utilisation de nodejs pour appeler les fichiers de la bibliothèque C peut améliorer les performances et la stabilité de l'application et nous aider à mieux terminer le développement du projet. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!