Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js nodejs:如何用更新的openssl编译grpc?_Node.js_Openssl_Grpc - Fatal编程技术网

Node.js nodejs:如何用更新的openssl编译grpc?

Node.js nodejs:如何用更新的openssl编译grpc?,node.js,openssl,grpc,Node.js,Openssl,Grpc,我想在nodejs项目中用更新的openssl(>=1.1.0)编译grpc,但我不知道如何处理它 下面是整个项目中的package.json { "name": "fabcar", "version": "1.0.0", "description": "FabCar application implemented in JavaScript", "engines": { "node": ">=8", "npm": ">

我想在nodejs项目中用更新的openssl(>=1.1.0)编译grpc,但我不知道如何处理它

下面是整个项目中的
package.json

{
    "name": "fabcar",
    "version": "1.0.0",
    "description": "FabCar application implemented in JavaScript",
    "engines": {
        "node": ">=8",
        "npm": ">=5"
    },
    "scripts": {
        "lint": "eslint .",
        "pretest": "npm run lint",
        "test": "nyc mocha --recursive"
    },
    "engineStrict": true,
    "author": "Hyperledger",
    "license": "Apache-2.0",
    "dependencies": {
        "fabric-ca-client": "~1.4.0",
        "fabric-network": "~1.4.0"
    },
    "devDependencies": {
        "chai": "^4.2.0",
        "eslint": "^5.9.0",
        "mocha": "^5.2.0",
        "nyc": "^13.1.0",
        "sinon": "^7.1.1",
        "sinon-chai": "^3.3.0"
    },
    "nyc": {
        "exclude": [
            "coverage/**",
            "test/**"
        ],
        "reporter": [
            "text-summary",
            "html"
        ],
        "all": true,
        "check-coverage": true,
        "statements": 100,
        "branches": 100,
        "functions": 100,
        "lines": 100
    }
}
在这个项目中,
fabca客户端
fabric网络
将使用
grpc

以下是一些环境:

$npm版本
{npm:'6.4.1',
战神:“1.10.1-DEV”,
cldr:'32.0',
http_解析器:“2.8.0”,
重症监护病房:'60.1',
单元:'57',
napi:'4',
nghttp2:'1.33.0',
节点:“8.16.0”,
openssl:'1.0.2r',
tz:‘2017c’,
unicode:'10.0',
紫外线:“1.23.2”,
v8:'6.2.414.77',
zlib:'1.2.11'}
$node-v
v8.16.0
请帮助
使用更新的openssl(>=1.1.0)在nodejs中编译grpc

我正在使用Ubuntu18.04,只需要在linux上构建

任何建议都是非常好的


谢谢

使用不同的OpenSSL库构建grpc有三个主要障碍。首先,Node.js已经为本机模块导出OpenSSL符号,以便动态链接。这意味着您将无法动态链接自己的OpenSSL库;这将导致符号冲突错误。您需要静态链接库,并确保隐藏符号。这可能需要显式链接相关的
.a
文件(如果已经有),或者在构建过程中从源代码处编译库。在为Windows或Electron构建时,这不是一个问题,因此在这些情况下,您应该能够动态链接

其次,OpenSSL头包含在节点头中,在构建grpc之类的本机插件时默认包含这些节点头。如果您想使用自己版本的OpenSSL,则需要为该版本使用自己的头文件,而不是那些头文件。我们目前需要这样做才能在Windows库中使用BoringSSL,因此我们有
节点gyp
下载标题,然后我们进入并删除
openssl
目录,然后构建真正的库。在这种情况下,您可能也需要这样做。这不是电子的问题

第三,编写grpc是为了在OpenSSL中使用各种特定的API。根据您要使用的其他版本,它可能不兼容。我不确定这里的可用版本范围是什么,但这是需要记住的


如果您能够解决所有这些问题,您将需要对grpc的
binding.gyp
文件进行一些重要的编辑来完成这一任务。如果您是从源代码构建OpenSSL,那么现有的
boringssl
目标应该是一个好的模板。您可以为
openssl
添加一个类似的目标,然后让
grpc
目标依赖于它。如果您已经有一个
.a
文件,您应该能够将链接器标志添加到
grpc
目标以链接它。在这两种情况下,请确保删除文件不同部分中对其他OpenSSL头的引用。

使用不同的OpenSSL库构建grpc有三个主要障碍。首先,Node.js已经为本机模块导出OpenSSL符号,以便动态链接。这意味着您将无法动态链接自己的OpenSSL库;这将导致符号冲突错误。您需要静态链接库,并确保隐藏符号。这可能需要显式链接相关的
.a
文件(如果已经有),或者在构建过程中从源代码处编译库。在为Windows或Electron构建时,这不是一个问题,因此在这些情况下,您应该能够动态链接

其次,OpenSSL头包含在节点头中,在构建grpc之类的本机插件时默认包含这些节点头。如果您想使用自己版本的OpenSSL,则需要为该版本使用自己的头文件,而不是那些头文件。我们目前需要这样做才能在Windows库中使用BoringSSL,因此我们有
节点gyp
下载标题,然后我们进入并删除
openssl
目录,然后构建真正的库。在这种情况下,您可能也需要这样做。这不是电子的问题

第三,编写grpc是为了在OpenSSL中使用各种特定的API。根据您要使用的其他版本,它可能不兼容。我不确定这里的可用版本范围是什么,但这是需要记住的


如果您能够解决所有这些问题,您将需要对grpc的
binding.gyp
文件进行一些重要的编辑来完成这一任务。如果您是从源代码构建OpenSSL,那么现有的
boringssl
目标应该是一个好的模板。您可以为
openssl
添加一个类似的目标,然后让
grpc
目标依赖于它。如果您已经有一个
.a
文件,您应该能够将链接器标志添加到
grpc
目标以链接它。在这两种情况下,请确保删除文件各个部分中对其他OpenSSL头的引用。

它在gm modified fabric sdk上使用。这用于国密 结构节点sdk,如有已经研究过的大兄弟,还请不吝赐教!多谢!是否可以将
节点模块/grpc/deps/grpc/third\u party/boringssl/include/openssl
中的所有*.h替换为my openssl/lib/*.h?然后编译。这行得通吗?它在gm改进的fabric sdk上使用。这用于国密 结构节点sdk,如有已经研究过的大兄弟,还请不吝赐教!多谢!是否可以将
节点模块/grpc/deps/grpc/third\u party/boringssl/include/openssl
中的所有*.h替换为my openssl/lib/*.h?然后编译。这样行吗?