构建 Firefox OS 时出现“/usr/bin/ld:找不到 -lX11”?

构建 Firefox OS 时出现“/usr/bin/ld:找不到 -lX11”?

尝试使用 Ubuntu 13.10 构建 Firefox OS 并出现此错误:

host SharedLib: libOpenglRender (out/host/linux-x86/obj/lib/libOpenglRender.so)
/usr/bin/ld: cannot find -lX11
/usr/bin/ld: cannot find -lX11
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/lib/libOpenglRender.so] Error 1

我的系统架构是 x86_64,带有 GCC 4.6.3

答案1

/usr/bin/ld:找不到 -lX11

这意味着您缺少 Xserver 开发库。您可以使用以下方法安装其中的大部分库:

sudo apt-get install xorg-dev

指南中还说:

Linux 要求

要在 Linux 上构建,您需要:

[大口喝]

X11 标头

答案2

在获取构建 Firefox OS 的代码之前,你需要正确配置构建系统。您目前可以在 64 位 Linux 发行版和 OS X 上进行构建。

注意:要将 Firefox OS 安装在手机上,请先将手机与电脑断开连接。我们会告诉您何时将其插入。

Linux 要求

要在 Linux 上构建,您需要:

A 64 bit GNU/Linux distribution (Ubuntu 12.04 recommended).
At least 4 GB of RAM/swap space.
At least 20 GB of available hard disk space.

这已经超过了最低限度,但有时建筑只是因为缺少资源而失败。

您还需要安装以下工具:

  • autoconf 2.13
  • 野牛
  • bzip2
  • 缓存
  • 卷曲
  • 柔性
  • 呆呆地
  • git
  • gcc / g++ / g++-multilib
  • 制作
  • OpenGL共享库
  • 修补
  • X11 标头
  • 32 位 ncurses
  • 32 位 zlib

模拟器构建问题

如果你正在构建模拟器,则需要注意以下问题:

首先,请注意您不应该使用 x86 模拟器——它很难安装并且支持不佳。

接下来,模拟器的构建系统会构建 32 位和 64 位版本的模拟器。由于模拟器依赖于 OpenGL,这意味着您需要在系统上安装 32 位和 64 位版本的 OpenGL 库。请参阅错误 897727

有两种方法可以解决此问题:

解决方案 1:安装 32 位和 64 位 OpenGL 库,并使用正确的符号链接

如果您的 Linux 发行版有 OpenGL 库的多库包,您可以尝试安装它们。然后您可能需要手动创建一些符号链接。

例如,以下是 Ubuntu 12.04 LTS x86-64 上的情况。在此发行版中,libgl1-mesa-dev 软件包无法同时安装在 x86-64 和 i386 版本中,但您可以同时安装以下软件包组合:

sudo apt-get install libgl1-mesa-dev libglapi-mesa:i386 libgl1-mesa-glx:i386

运行此命令后,您仍需要手动创建一些符号链接才能成功构建模拟器:

 sudo ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so
 sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

解决方案 2:只需修补模拟器,使其仅构建 64 位

只需申请此补丁到 B2G repo 下的 sdk/git 存储库。这将导致 B2G 仿真器仅在您使用 64 位系统时尝试构建 64 位仿真器,从而避免任何多库问题。32 位仿真器在 64 位系统上无论如何都未使用。这是最简单的解决方案……直到这个补丁最终失效。

64 位要求安装

安装依赖项

sudo dpkg --add-architecture i386
sudo apt-get update

完成后,您可以安装必要的软件包:

sudo apt-get install --no-install-recommends autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib gcc-4.6 g++-4.6 g++-4.6-multilib git lib32ncurses5-dev lib32z1-dev zlib1g:amd64 zlib1g-dev:amd64 zlib1g:i386 zlib1g-dev:i386 libgl1-mesa-dev libx11-dev make zip cmake libxml2-utils

安装 adb

在构建 B2G 之前,构建过程需要从手机上的 Android 安装中提取二进制 blob(当然,除非您正在构建模拟器)。为此,您将需要 adb,即 Android 调试桥。

您可以下载并安装 adb 作为 Android SDK 包的一部分,适用于 Mac、Linux 或 Windows - 请访问获取 Android SDK 页面。

较新的 Linux 发行版已在其存储库中安装了 adb。对于 Ubuntu 12.10 及更高版本,请运行以下命令:

sudo apt-get install android-tools-adb

安装 heimdall

Heimdall 是一款用于刷写三星 Galaxy S2 的实用程序。Boot to Gecko 刷写实用程序会使用它来用 Firefox OS 替换手机内容,以及将更新版本的 B2G 和 Gaia 刷写到设备上。如果您想在 Galaxy S2 上安装 Firefox OS,您将需要它;其他设备则不需要它。对于其他设备,我们构建并使用 fastboot 实用程序。

注意:再次强调,这仅适用于在 Samsung Galaxy S2 上安装 Firefox OS。

有两种方法可以安装 heimdall:

  • 你可以下载代码GitHub 并自行构建。
    • 使用包管理器来安装它。
    • 在 Linux 上:sudo apt-get install libusb-1.0-0 libusb-1.0-0-dev

配置 ccache

B2G 构建过程使用 ccache。ccache 的默认缓存大小为 1GB,但 B2G 构建很容易达到这个大小;建议使用 3GB 左右。您可以通过在终端内运行以下命令来配置缓存:

ccache --max-size 3GB

对于 Linux:为你的手机配置 udev 规则

注意:本节专门针对 Linux;Mac OSX 已经设置了必要的设备权限。

接下来,你需要为你的手机配置 udev 规则,

您可以在手机插入后运行 lsusb 来获取 USB 供应商 ID,但通常是 Google 18d1、Samsung 04e8、ZTE 19d2、Geeksphone/Qualcomm 05c6。在您的/etc/udev/rules.d/android.rules文件中添加此行(将 XXXX 替换为您设备的 ID):

SUBSYSTEM=="usb", ATTR{idVendor}=="XXXX", MODE="0666", GROUP="plugdev"

以中兴通讯为例,android.rules中的内容为

SUBSYSTEM=="usb", ATTR{idVendor}=="19d2", MODE="0666", GROUP="plugdev"

如果文件不存在,请创建它。rules.d 目录通常默认为只读,因此您可能必须使用 chmod 使目录或文件可写,或两者兼而有之。

保存并关闭文件后,使文件可读:

sudo chmod a+r /etc/udev/rules.d/android.rules

现在 udev 规则已更新,请重新启动 udev 守护进程。对于 ubuntu:

sudo service udev restart

最后,拔下 USB 线但不要重新插入,因为我们需要先在手机上启用远程调试。

启用远程调试

在将手机重新插入 USB 端口之前,请将其置于 USB 开发者模式。这样您就可以调试和刷新手机。要启用开发者模式,请在手机上选择Settings app -> Device information -> More Information -> Developer -> Remote debugging(在旧版本中这称为开发者模式)。选中该选项后,远程调试已启用,您就可以开始了。

此时,通过 USB 数据线将手机连接到计算机(如果您之前创建了 udev 规则,这将触发 udev 检测手机并创建具有正确权限的设备节点)。现在,您可以检查是否可以通过 adb devices 命令列出您的设备。如果一切正常,您应该会看到类似这样的输出(以下适用于 Geeksphone Keon):

adb devices
List of devices attached
full_keon       device

如果设备未按预期列出,请检查文件名和脚本是否正确(请参阅上一节),然后重新启动计算机并重新输入命令。另请注意,如果您的设备使用快速启动,则引导加载程序可能会使用与设备正常启动时看到的供应商 ID 不同的供应商 ID 来标识自己。

备份手机系统分区

注意:如果您没有现有系统备份,则必须在构建设备之前执行此操作。因为某些库将在构建时被引用。这些库可能是专有的,因此我们无法在代码库中提供。

建议备份手机上的整个 Android 系统分区。

如果您稍后删除 B2G 树,则可以使用此 Android 二进制 blob 副本。为此,请运行:

adb pull /system <backup target dir>/system

根据手机的不同,您可能还需要拉取 /data 和/或 /vendor 目录:

adb pull /data <backup target dir>/data
adb pull /vendor <backup target dir>/vendor

如果拉取命令失败并出现“权限不足”消息,请尝试以下操作:

  • 停止并重新启动 adb 服务器,如果失败,
  • 仔细检查您是否已向自定义 ROM 中的“adb”工具授予 root 权限(例如,在 CyanogenMod 下,将“设置 -> 系统 -> 开发人员选项 -> Root 访问”更改为“应用和 ADB”或“仅 ADB”)。
  • 验证您是否已正确设置 udev 规则(请参阅对于 Linux:为你的手机配置 udev 规则

进入下一步

此时,您应该准备好获取Firefox OS 代码!

来源

相关内容