【问题标题】:Error while trying to run 32-bit app on 64-bit. Running with sudo works fine尝试在 64 位上运行 32 位应用程序时出错。使用 sudo 运行正常
【发布时间】:2015-02-06 02:20:44
【问题描述】:

我在 32 位 arm 机器上编译了一个简单的 hello-world 应用程序。并将所需的 32 位库复制到 aarch64 机器上。(ld-2.19.so 和 libc-2.19.so)

如果我是 root (sudo) 则运行良好,但普通用户的权限被拒绝。

这是错误 -

ubuntu@ubuntu:~$ ./ld-2.19.so ./hello_world 
./hello_world: error while loading shared libraries: ./hello_world: failed to map segment from shared object: Operation not permitted
ubuntu@ubuntu:~$ ./ld-2.19.so --list ./hello_world 
./hello_world: error while loading shared libraries: ./hello_world: failed to map segment from shared object: Operation not permitted

这是 sudo- 的行为

ubuntu@ubuntu:~$ sudo ./ld-2.19.so ./hello_world
Hello World
ubuntu@ubuntu:~$ sudo ./ld-2.19.so --list ./hello_world
linux-vdso32.so.1 =>  (0xf75cd000)
libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xf74de000)
/lib/ld-linux-armhf.so.3 => ./ld-2.19.so (0xaae03000) 

【问题讨论】:

  • 我不认为这是题外话。你检查内核日志,还是尝试 strace?它可能类似于 SE-Linux 权限问题,因为我猜你的 64 位内核是相当新的。或者最简单的是你的 libc 有正确的(文件)权限标志吗?
  • 是的,我猜我的库有正确的权限。 -rwxrwxr-x 1 ubuntu ubuntu 906980 2 月 6 日 01:04 libc-2.19.so lrwxrwxrwx 1 ubuntu ubuntu 2 月 6 日 21:19 libc.so.6 -> libc-2.19.so

标签: linux ubuntu arm glibc arm64


【解决方案1】:

检查这些库的文件权限。如果您不是 root,您可能会发现您没有权限读取文件或它们所在的目录。

【讨论】:

  • 不,这些库确实具有读取和执行权限。事实上,我什至更改了整个目录的权限 - chmod -R 777 /lib/arm* 。仍然看到同样的错误
  • 我的 /tmp 有 exec 权限。我认为这与此无关
  • 查看命令 ldconfig(8)。这会检查您的库和共享库的链接,并确保一切正常。网上一堆帖子说试试看。 linux.die.net/man/8/ldconfig
  • 哎呀,我刚刚意识到您在 64 位机器上创建了自己的 32 位安装。查看命令 ldd。这将向您显示库依赖关系树。由于您尝试在 64 位操作系统上链接 32 位,因此您可能需要处理许多链接。您可能需要参考 32 位安装来检查您是否具有 64 位安装所需的所有依赖项。
猜你喜欢
  • 2023-02-15
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
  • 2016-08-26
  • 2010-10-18
  • 2012-07-04
  • 1970-01-01
相关资源
最近更新 更多