Node.js nodejs:如何用更新的openssl编译grpc?
我想在nodejs项目中用更新的openssl(>=1.1.0)编译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": ">
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?然后编译。这样行吗?