首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在x86上仿真

在x86上仿真
EN

Unix & Linux用户
提问于 2021-02-13 11:44:52
回答 3查看 3K关注 0票数 1

我想在运行rasbian的Raspberry Pi上运行一个星域服务器。

服务器是为在x86体系结构上运行而构建的,所以我的目标是模仿x86架构来运行服务器。

编辑: box86不运行64位x86二进制文件。

为此,我尝试使用box86。允许运行x86程序(允许我下载服务器的程序)。但是,运行服务器会导致bash:./ program :无法执行二进制文件: Exec格式错误--这很奇怪,因为当遇到box86时,应该模仿x86程序。

我尝试使用qemu来模拟服务器。

代码语言:javascript
复制
sudo apt install qemu-user qemu-system qemu
sudo qemu-x86_64 starbound_server

导致

代码语言:javascript
复制
/lib64/ld-linux-x86-64.so.2: No such file or directory

似乎缺少了一些动态库。

我认为这些库将随qemu一起提供,所以我尝试使用-L参数来指定不同的ld文件。但是程序似乎只查看/lib64文件夹。

最后一次尝试是使用x86系统中的lib文件创建这个文件夹。但这会导致

代码语言:javascript
复制
ERROR: ld.so: object '/usr/lib/arm-linux-gnueabihf/libarmmem-${PLATFORM}.so' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.

为了解决这个问题,人们建议修改/etc/ld.so.preload以删除对libarmmem的引用,但是这个文件并不存在于rasbian系统中。

我想知道是否有更好的方法来模仿x86程序?

如果没有,在哪里可以找到适当的库来填充/lib64文件夹?

以下是一些我自己获得的信息。

代码语言:javascript
复制
machine: Advanced Micro Devices X86-64
type: EXEC
class: ELF64

共享库

代码语言:javascript
复制
[libpthread.so.0]
[libdl.so.2]
librt.so.1]
[libm.so.6]
[libc.so.6]
[ld-linux-x86-64.so.2]
EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2021-02-13 18:46:31

感谢斯蒂芬·凯特在评论中。

使用chroot本教程解决了这一问题。

使用64位debian创建目录。

代码语言:javascript
复制
apt install binutils debootstrap
mkdir my-directory
debootstrap --arch amd64 stretch my-directory http://deb.debian.org/debian

然后在环境中安装qemu

代码语言:javascript
复制
chroot my-directory
apt install qemu qemu-system

然后随时运行该程序。

代码语言:javascript
复制
chroot my-directory
qemu-x86_64 my_x86_programm
票数 0
EN

Unix & Linux用户

发布于 2021-02-13 11:55:56

只是一些想法,因为我还没试过。

/lib64/ld-linux-x86-64.so.2: No such file or directory是由未安装的库引起的。

您将需要为外部架构添加库。

在debian中,有一个多重包(如果我记得正确的话)来管理这个包。可以从Debian中提取该架构:您的操作系统获得其他包的地方。

您可能需要使用chroot /挂载名称-空格,以避免库混淆。

票数 0
EN

Unix & Linux用户

发布于 2021-07-09 15:58:40

我只是在使用QEMU5.2时遇到了这个问题,并且需要一个无需色度就能工作的解决方案。我发现,如果在x86_64中安装了/some_path库(libc、do x86_64.so.2等),我可以这样做:

代码语言:javascript
复制
ln -s . /some_path/lib64

然后可以使用:

代码语言:javascript
复制
qemu-static-x86_64 -L /some_path <command to run>

我还必须设置:

代码语言:javascript
复制
LD_LIBRARY_PATH=/some_path

但这可能是由于我的特殊环境。

此外,由于我使用的是qemu-user不可用的Centos7 (对于aarch64),所以我能够从https://packages.debian.org/sid/main/qemu-user-static获取debian user静态.deb并使用

代码语言:javascript
复制
ar x <deb file>
tar -xf data.tar.xz

然后使用生成的qemu-静态*二进制文件,因为它们是静态链接的。当然,我必须安装x86_64库。

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

https://unix.stackexchange.com/questions/634258

复制
相关文章

相似问题

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