我需要从 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 的软件包来解决这个问题。
- 安装
dpkg
:nix-env -i dpkg
- 下载
libc-i386
来自 debian 的 64 位系统软件包:curl -O http://ftp.us.debian.org/debian/pool/main/e/eglibc/libc6-i386_2.11.3-4_amd64.deb
- 提取该包:
dpkg -x libc6-i386_2.11.3-4_amd64.deb libc6-i386
mksdcard
使用 32 位 ELF 解释器运行:./libc6-i386/lib32/ld-linux.so.2 /path/to/mksdcard
能够运行mksdcard
via之类的程序的一种方法./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"
下载完成后,将文件夹解压
android-sdk-linux
到您的主目录。/home/用户/android-sdk-linux
创建一个名为的环境变量
ANDROID_HOME
。ANDROID_HOME = /home/用户/android-sdk-linux
将这两个文件夹添加到您的环境 PATH 变量中,
/home/user/android-sdk-linux/tools
/home/user/android-sdk-linux/platform-tools
- 现在打开终端并检查所有二进制文件是否正常工作,例如“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 名称。
完成这些步骤后,要启动您在上一步中创建的 AVD,请在终端中执行以下命令:
模拟器-avd emul-noskin-netfast
答案3
在我的 NixOS 版本上,我可以通过执行以下命令来获得工作mksdcard
:nix-env -i android-sdk-24.1.2
nix-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 >>>