Maison > interface Web > Questions et réponses frontales > Un moyen simple d'appeler c en utilisant nodejs

Un moyen simple d'appeler c en utilisant nodejs

WBOY
Libérer: 2023-05-25 16:29:08
original
1853 Les gens l'ont consulté

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.

Écrire des fichiers de bibliothèque en langage C

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.

1. Créez un fichier c

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;
}
Copier après la connexion

这个 c 文件里只定义了一个函数 add,接收两个整数参数并返回它们的和。

2. 编译 c 文件

接下来,我们需要使用编译器将 c 文件编译为动态链接库或者静态链接库。这里以 Linux 系统下的 gcc 编译器为例。

动态链接库编译命令如下:

$ gcc -fPIC -shared -o libadd.so add.c
Copier après la connexion

静态链接库编译命令如下:

$ gcc -c add.c
$ ar rcs libadd.a add.o
Copier après la connexion

这里的 -fPIC 参数是让编译器生成位置无关代码,以便能够在不同的进程地址空间中正确地共享代码段。生成的动态链接库或者静态链接库文件分别是 libadd.solibadd.a

nodejs 调用 c 库文件

有了 c 的库文件后,我们就可以在 nodejs 中调用这个库文件里的函数了。这里以 Linux 系统下的 nodejs 为例。

1. 使用 ffi-napi 模块

Node.js 的 ffi 模块可以使用外部动态库、静态库和 C 库函数。但是在新的 Node.js 版本中,该模块可能会出现问题。如果我们需要使用更加稳定的 ffi 模块,我们可以选择使用 ffi-napi 模块,在进程中调用 C 库。

我们可以在项目中使用以下命令安装 ffi-napi 模块:

$ npm install ffi-napi
Copier après la connexion

2. 创建 nodejs 文件

接下来,我们需要创建一个 nodejs 文件 app.js,文件内容如下:

const ffi = require('ffi-napi');

const libadd = ffi.Library('./libadd', {
  'add': ['int', ['int', 'int']]
});

console.log(libadd.add(1, 2));
Copier après la connexion

这里需要注意,Library() 函数的第一个参数是 c 库文件的路径,不同平台下的文件名后缀也可能不一样。第二个参数是一个对象,其中包含要导入的函数的名称和参数类型,这里我们导入了 add 函数,并指定了其参数类型和返回值类型。

最后我们调用了 add

$ node app.js
Copier après la connexion

Une seule fonction 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.
  1. nodejs appelle le fichier de bibliothèque c
  2. Après avoir le fichier de bibliothèque c, nous pouvons appeler les fonctions de ce fichier de bibliothèque dans nodejs. Ici, nous prenons comme exemple nodejs sous le système Linux.
  3. 1. Utilisez le module ffi-napi
Le module ffi de Node.js peut utiliser des bibliothèques dynamiques externes, des bibliothèques statiques et des fonctions de bibliothèque C. Mais dans les nouvelles versions de Node.js, ce module peut rencontrer des problèmes. Si nous avons besoin d'utiliser un module ffi plus stable, nous pouvons choisir d'utiliser le module ffi-napi pour appeler la bibliothèque C dans le processus.

Nous pouvons utiliser la commande suivante pour installer le module ffi-napi dans le projet : 🎜rrreee🎜2 Créez un fichier nodejs🎜🎜Ensuite, nous devons créer un fichier nodejs 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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal