如何在 64 位 NixOS 上安装 32 位动态链接器?

如何在 64 位 NixOS 上安装 32 位动态链接器?

我需要从 Android SDK 中使用它mksdcard。目前,当我运行该可执行文件时,系统会报告“没有这样的文件或目录”。

对于 Debian,可以安装 ia32-libs. 在 Ubuntu 上,该软件包被称为libc6-i386

如何/lib/ld-linux.so.2在 NixOS 上获取该文件?

答案1

NixOS 本身不具备多架构支持。

唯一包含 32 位 ELF 解释器ld-linux.so.2文件的 Nix 包是 glibc 的 i386 版本。

幸运的是,我们可以通过借用 Debian 的软件包来解决这个问题。

  1. 安装dpkgnix-env -i dpkg
  2. 下载libc-i386来自 debian 的 64 位系统软件包:curl -O http://ftp.us.debian.org/debian/pool/main/e/eglibc/libc6-i386_2.11.3-4_amd64.deb
  3. 提取该包:dpkg -x libc6-i386_2.11.3-4_amd64.deb libc6-i386
  4. mksdcard使用 32 位 ELF 解释器运行:./libc6-i386/lib32/ld-linux.so.2 /path/to/mksdcard

能够运行mksdcardvia之类的程序的一种方法./mksdcard是使用patchelf已安装的 via 来修补它们:nix-env -i patchelf

然后你可以做类似的事情patchelf --set--interpreter /path/to/libc6-i386/lib32/ld-linux.so.2 /path/to/mksdcard

否则,您可以尝试将符号链接放置在它告诉您需要的ld-linux.so.2位置。ldd

[root@nixos:/tmp]# ./libc6-i386/lib32/ld-linux.so.2
Usage: ld.so [OPTION]... EXECUTABLE-FILE [ARGS-FOR-PROGRAM...]
You have invoked `ld.so', the helper program for shared library executables.
This program usually lives in the file `/lib/ld.so', and special directives
in executable files using ELF shared libraries tell the system's program
loader to load the helper program from this file.  This helper program loads
the shared libraries needed by the program executable, prepares the program
to run, and runs it.  You may invoke this helper program directly from the
command line to load and run an ELF executable file; this is like executing
that file itself, but always uses this helper program from the file you
specified, instead of the helper program file specified in the executable
file you run.  This is mostly of use for maintainers to test new versions
of this helper program; chances are you did not intend to run this program.

  --list                list all dependencies and how they are resolved
  --verify              verify that given object really is a dynamically linked
                        object we can handle
  --library-path PATH   use given PATH instead of content of the environment
                        variable LD_LIBRARY_PATH
  --inhibit-rpath LIST  ignore RUNPATH and RPATH information in object names
                        in LIST
  --audit LIST          use objects named in LIST as auditors

答案2

您可以尝试此代码。(我不确定它是否有效,因为我在 Fedora 操作系统和 Ubuntu 操作系统上都这样做过)

从此代码下载 SDK:

wget "http://dl.google.com/android/android-sdk_r24.1.2-linux.tgz"
  1. 下载完成后,将文件夹解压android-sdk-linux到您的主目录。

    /home/用户/android-sdk-linux

  2. 创建一个名为的环境变量ANDROID_HOME

    ANDROID_HOME = /home/用户/android-sdk-linux

将这两个文件夹添加到您的环境 PATH 变量中,

/home/user/android-sdk-linux/tools
/home/user/android-sdk-linux/platform-tools
  1. 现在打开终端并检查所有二进制文件是否正常工作,例如“android”等。如果工作正常,现在在终端中执行以下两个命令。

要下载 Android ARM 映像并更新 SDK,请在终端中执行以下命令:

echo y | android update sdk --all --filter platform-tools,android-19,sys-img-armeabi-v7a-android-19 --no-ui --force

现在创建一个 AVD,在终端中执行以下命令:

echo no | android create avd -n emul -t android-19 -s 360x600 --abi default/armeabi-v7a

注意:上述命令中的“emul”是 AVD 名称。

  1. 完成这些步骤后,要启动您在上一步中创建的 AVD,请在终端中执行以下命令:

    模拟器-avd emul-noskin-netfast

答案3

在我的 NixOS 版本上,我可以通过执行以下命令来获得工作mksdcardnix-env -i android-sdk-24.1.2nix-channel --update

[root@nixos:~]# /root/.nix-profile/bin/mksdcard
mksdcard: create a blank FAT32 image to be used with the Android emulator
usage: mksdcard [-l label] <size> <file>

  if <size> is a simple integer, it specifies a size in bytes
  if <size> is an integer followed by 'K', it specifies a size in KiB
  if <size> is an integer followed by 'M', it specifies a size in MiB
  if <size> is an integer followed by 'G', it specifies a size in GiB

Minimum size is 9M. The Android emulator cannot use smaller images.
Maximum size is 1099511627264 bytes, 1073741823K, 1048575M or 1023G

基本包管理:“当您安装 Nix 时,Nixpkgs 会自动添加到您的“订阅”频道列表中。”

但是,如果你已删除订阅,或者更愿意“安装较旧版本的软件包,而不是频道当前内容提供的软件包”,或者如果 android sdk 软件包“已从频道中删除”,你可以按照一键安装程序

您可以前往 http://hydra.nixos.org/jobset/nixpkgs/trunk/channel/latest并单击适用于您平台的单个软件包的任意链接。第一次执行此操作时,浏览器会询问如何处理 application/nix-package 文件。您应该使用 /nix/bin/nix-install-package 打开它们。这将打开一个窗口,要求您确认是否要安装该软件包。当您回答 Y 时,将安装该软件包及其所有依赖项。这是一种二进制部署机制 — 您将获得针对所选平台类型预编译的软件包。

在这种情况下,您可能对x86_64 Android 工作室

我的系统信息供参考

[root@nixos:~]# uname -a Linux nixos 3.18.20 #1-NixOS SMP Thu Jan 1 00:00:01 UTC 1970 x86_64 GNU/Linux

[root@nixos:~]# cat /etc/issue

<<< Welcome to NixOS 15.09.10.4a1c7fd (\m) - \l >>>

相关内容