首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NAPI中使用libsodium

在NAPI中使用libsodium
EN

Stack Overflow用户
提问于 2019-09-01 02:50:56
回答 1查看 239关注 0票数 0

我正在使用一个依赖于library (libpaseto)的库。我已经在我的机器上安装了它,我正在尝试构建一个nodejs插件。

我有以下binding.gyp文件:

代码语言:javascript
复制
{
    "targets": [{
        "target_name": "testaddon",
        "cflags!": [ "-fno-exceptions"],
        "cflags_cc!": [ "-fno-exceptions" ],
        "cflags_cc":["-std=c++1z" ,"-lsodium","$(pkg-config --cflags libsodium)"],
        "ldflags_cc":["$(pkg-config --libs libsodium)"],
        "sources": [
            "cppsrc/main.cpp",
            "cppsrc/functionexample.cpp",
            "cppsrc/libpaseto/src/helpers.c",
            "cppsrc/libpaseto/src/paseto.c",
            "cppsrc/libpaseto/src/paseto_v2_local.c",
            "cppsrc/libpaseto/src/paseto_v2_public.c",
        ],
        'include_dirs': [
            "<!@(node -p \"require('node-addon-api').include\")"
        ],
        'libraries': [],
        'dependencies': [
            "<!(node -p \"require('node-addon-api').gyp\")"
        ],
        'defines': [ 'NAPI_DISABLE_CPP_EXCEPTIONS' ,'SODIUM_STATIC=1',
            'HAVE_LIBM=1']
    }]
}

下面是我的插件的代码:

代码语言:javascript
复制
#include "./headers/functionexample.h"
#include <iostream>
#include <fstream>
#include "libpaseto/include/paseto.h"
#include <exception>
Napi::Boolean addon::InitPasetoWrapped(const Napi::CallbackInfo &info)
{
    bool returnValue = paseto_init();
    Napi::Env env = info.Env();
    return Napi::Boolean::New(env, returnValue);
}

Napi::Object addon::Init(Napi::Env env, Napi::Object exports)
{
    exports.Set("add", Napi::Function::New(env, addon::addWrapped));
    exports.Set("getOsName", Napi::Function::New(env, addon::getOSNameWrapped));
    exports.Set("writeToFile", Napi::Function::New(env, addon::writeFileWrapped));
    exports.Set("initPaseto", Napi::Function::New(env, addon::InitPasetoWrapped));
    return exports;
}

我可以毫无问题地编译它。我在nodejs代码中导出了一些方法。但是,当我尝试从我的js代码运行导出的方法initPaseto时,我得到了以下错误:

代码语言:javascript
复制
node:symbol lookup error: undefined symbol:sodium init

我怎么才能修复它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-02 18:01:40

所以我最终找到了answer.In,它提到you have to pass the -lsodium flag可以在没有problems.So的情况下编译,我要做的就是在我的binding.gyp库中添加这个标志。下面是我的最终binding.gyp文件:

代码语言:javascript
复制
{
    "targets": [{
        "target_name": "testaddon",
        "cflags!": [ "-fno-exceptions"],
        "cflags_cc!": [ "-fno-exceptions" ],
        "cflags_cc":["-std=c++1z"],

        "sources": [
            "cppsrc/main.cpp",
            "cppsrc/functionexample.cpp",
            "cppsrc/libpaseto/src/helpers.c",
            "cppsrc/libpaseto/src/paseto.c",
            "cppsrc/libpaseto/src/paseto_v2_local.c",
            "cppsrc/libpaseto/src/paseto_v2_public.c",
        ],
        'include_dirs': [
            "<!@(node -p \"require('node-addon-api').include\")"
        ],
        'libraries': ['-lsodium'],
        'dependencies': [
            "<!(node -p \"require('node-addon-api').gyp\")"
        ],
        'defines': [ 'NAPI_DISABLE_CPP_EXCEPTIONS' ,'SODIUM_STATIC=1',
            'HAVE_LIBM=1']
    }]
}

另外,这个github问题帮助我理解了如何在我的项目中添加库:https://github.com/nodejs/node-gyp/issues/328

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57740825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档