---
title: CentOS 7.6到openEuler 20.03-LTS版本的二进制文件迁移
description: "将软件从CentOS迁移到openEuler操作系统时，如果要迁移的软件没有源码，只有二进制文件，又无法使用x2openEuler工具迁移的情况下，可以使用二进制搬迁工具对二进制ELF文件直接进行修改，将CentOS环境上的依赖修改为openEuler环境上的替代依赖，进而达到搬迁的目的。关于软件搬迁到openEuler的更多详细信息请参见openEuler社区(https://www.openeuler.org/zh/)。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengfaq/productfaq/osfaq/os_faq_0012.html
sourcePath: /source/zh/kunpengfaq/productfaq/osfaq/os_faq_0012.html
indexId: a65d67bf21036eba8d8e8aa519eebd03a4b5d4651a88e1959e9cea707e1f526f55
---
# CentOS 7.6到openEuler 20.03-LTS版本的二进制文件迁移

将软件从CentOS迁移到openEuler操作系统时，如果要迁移的软件没有源码，只有二进制文件，又无法使用x2openEuler工具迁移的情况下，可以使用二进制搬迁工具对二进制ELF文件直接进行修改，将CentOS环境上的依赖修改为openEuler环境上的替代依赖，进而达到搬迁的目的。关于软件搬迁到openEuler的更多详细信息请参见openEuler社区(https://www.openeuler.org/zh/)。

本节以迁移某个应用程序为例进行介绍，以下操作步骤均在openEuler操作系统上执行。

1. 安装Ruby。

```
yum install ruby -y
```


2. 安装patchelf-0.14。

```
git clone https://github.com/NixOS/patchelf.git -b 0.14
cd  patchelf
./bootstrap.sh
./configure
make
make install
```


3. 创建相关目录，用于存放迁移过来的二进制文件和依赖库文件。

```
mkdir -p /opt/c7/usr/lib64
mkdir -p /opt/c7/usr/lib
mkdir /opt/c7/usr/bin
```


4. 从CentOS拷贝二进制文件及运行所需的动态库so文件，依赖的so文件可以通过ldd命令查看。

```
rsync -av <centos_ip>:/usr/lib64/* /opt/c7/usr/lib64
rsync -av <centos_ip>:/usr/lib/* /opt/c7/usr/lib
scp <centos_ip>:/usr/local/bin/qemu-img /opt/c7/usr/bin
```


5. 上传add-rpath.sh和expand-lib.rb脚本到“/opt/c7/usr”目录，并执行以下命令。
  脚本获取地址：https://www.hikunpeng.com/forum/thread-0248123322153999011-1-1.html(https://www.hikunpeng.com/forum/thread-0248123322153999011-1-1.html)

```
cd /opt/c7/usr
chmod +x add-rpath.sh expand-lib.rb
./add-rpath.sh bin/*
./add-rpath.sh lib64/libc-2.17.so
./expand-lib.rb lib64/* lib64/*/*
```


6. 以上步骤完成后，执行ldd xx命令可以查看程序依赖库。
  如果有缺失的库，即提示“xx.so not found”
  ，则需要使用patchelf
  命令来指定程序运行时搜索共享库的路径。在本例中，使用patchelf
  命令来指定libaio.so.1的路径为“/opt/c7/usr/lib64”
  。

```
patchelf --set-rpath /opt/c7/usr/lib64 ./lib64/libaio.so.1
```
