鲲鹏 ARM 架构 麒麟 Lylin v10 安装 argon2

本文详细描述了解决在aarch64架构服务器上部署Node.js项目时遇到的Argon2模块安装和链接问题,包括检查gcc版本、设置环境变量、编译和链接过程,以及处理可能的错误和符号查找问题。
摘要由CSDN通过智能技术生成

很多同学node项目使用 argon2 的时候,在项目部署时总会遇到各种问题,我这里记录一下解决办法,基本通用。

安装 argon2, 官方地址:https://github.com/ranisalt/node-argon2

服务器是aarch64架构,操作系统是 Kylin V10

argon2 版本是 0.40.1

gcc 版本是 7.3.0

node 版本是 18.20.1

首先确保安装了gcc和g++

查看 gcc 和 g++ 的版本

gcc --version

g++ --version

在node项目目录安装 argon2

--build-from-source 参数是为了强制重新编译 argon2 模块

npm install --build-from-source

如果安装 argon2 报错:npm ERR! make: gcc-7: Command not found

node版本如果是18.20.1是不会报错的,如果是其他版本如18.15.0就会报错

查看 gcc 的位置

whereis gcc 或者 ls -l /usr/bin/gcc*

根据 gcc 的位置设置环境变量

export CC=/usr/bin/gcc

export CXX=/usr/bin/g++

确保环境变量设置正确,这应该输出 gcc 和 g++。

echo $CC

echo $CXX

持久化环境变量,这样,每次登录时,这些环境变量都会自动设置。

echo "export CC=/usr/bin/gcc" >> ~/.bashrc

echo "export CXX=/usr/bin/g++" >> ~/.bashrc

source ~/.bashrc

如果项目运行报错:

node: symbol lookup error:node_modules/argon2/build/Release/argon2.node: undefined symbol: argon2_ctx

检查 libargon2 是否正确安装

yum list installed | grep libargon2 或者 dnf list installed | grep libargon2

# 如果 libargon2 没有安装,可以使用以下命令安装

# yum install libargon2

# yum install libargon2-devel

确认 argon2 库的版本

rpm -qi libargon2

确认 libargon2 库的位置,我的路径是 /usr/lib64/libargon2.so.0

find / -name "libargon2.so*" 2>/dev/null

# 如果输出只有 /usr/lib64/libargon2.so.0,而没有 /usr/lib64/libargon2.so

# 可以创建一个符号链接用于链接到 libargon2.so.0,因为 argon2 模块可能需要 libargon2.so

ln -s /usr/lib64/libargon2.so.0 /usr/lib64/libargon2.so

# 再次确认 libargon2 库的位置

find / -name "libargon2.so*" 2>/dev/null

# 输出应该包含 /usr/lib64/libargon2.so.0 和 /usr/lib64/libargon2.so

# 确保环境变量 LD_LIBRARY_PATH 包含 libargon2 的路径

# libargon2 库在 /usr/lib64 目录下,所以需要将该目录添加到 LD_LIBRARY_PATH 中

export LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH

# 持久化环境变量,这样,每次登录时,这些环境变量都会自动设置。

echo 'export LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc

source ~/.bashrc

# 重新编译 argon2 模块

cd /home/www/wwwroot/baswei/node_modules/argon2

npm rebuild --build-from-source

# 确保正确的 argon2 库被链接到 argon2 模块

# 如果输出中包含了 libargon2.so.0 => /usr/lib64/libargon2.so.0,这意味着 argon2 模块正确链接到 libargon2 库

ldd /home/www/wwwroot/baswei/node_modules/argon2/build/Release/argon2.node

# 确认 libargon2.so 是否包含 argon2_ctx 符号,如果没有输出,这意味着库可能不包含所需的符号,或者库版本不正确

nm -D /usr/lib64/libargon2.so | grep argon2_ctx

# 运行项目

npm run start:dev

# 如果还是报错:node: symbol lookup error: /home/www/wwwroot/baswei/node_modules/argon2/build/Release/argon2.node: undefined symbol: argon2_ctx

# 修改 argon2 模块的 binding.gyp 文件

cd /home/www/wwwroot/baswei/node_modules/argon2

vi binding.gyp

找到 "target_name": "argon2" 的部分,并在该部分中添加 libraries 字段。确保包含 -L/usr/lib64(库的路径)和 -largon2(库的名称),这可以确保在编译 argon2.node 时链接到正确的 libargon2 库。

# {

#     "target_name": "argon2",

#     "defines": [

#         "NAPI_VERSION=(napi_build_version)",

#         "NODE_ADDON_API_DISABLE_DEPRECATED",

#         "NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED"

#     ],

#     "sources": [ "argon2.node.cpp" ],

#     "cflags_cc!": [ "-Wall", "-Wextra", "-Wconversion", "-Wformat", "-Wnon-virtual-dtor", "-pedantic", "-Werror" ],

#     "cflags_c!": [ "-fno-exceptions" ],

#     "include_dirs": [ "<!(node -e \"require('node-addon-api').include_dir\")" ],

#     "dependencies": [ "libargon2" ],

#     "libraries": [  // 添加这一行

#         "-L/usr/lib64",  // 指定库的搜索路径

#         "-largon2"       // 链接 libargon2 库

#     ],

#     "configurations": {

#         "Debug": {

#             "conditions": [

#                 ["OS=='linux'", {

#                     "cflags": [ "-O0", "-fprofile-arcs", "-ftest-coverage" ],

#                     "ldflags": [ "-fprofile-arcs", "-ftest-coverage" ]

#                 }]

#             ],

#             "defines!": [ "NODE_ADDON_API_ENABLE_TYPE_CHECK_ON_AS" ]

#         }

#     }

# }

# 重新编译 argon2 模块

cd /home/www/wwwroot/baswei/node_modules/argon2

npm rebuild --build-from-source

# 检查 argon2 模块是否正确链接到 libargon2 库,查看输出中是否包含了指向 /usr/lib64/libargon2.so 的路径

ldd /home/www/wwwroot/baswei/node_modules/argon2/build/Release/argon2.node

# 运行项目

npm run start:dev

  • 29
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值