为 ARM 交叉编译 ocaml 应用程序

2023-12-26

我正在交叉编译一个触摸屏驱动程序,它附带一个 ocaml 校准应用程序。

我正在尝试编译 ARM 的驱动程序和应用程序,特别是运行 Angström 的 Beagleboard。

事情是这样的:

^_^[raziel@Bebop zytouch-driver-20081121]$ source /usr/local/angstrom/arm/environment-setup 
^_^[raziel@Bebop zytouch-driver-20081121]$ make CC=arm-angstrom-linux-gnueabi-gcc 
arm-angstrom-linux-gnueabi-gcc -std=gnu99 -g -O2 -Wall -Wextra -Werror -Wstrict-prototypes -Wmissing-prototypes   -c -o daemon/config.o daemon/config.c
arm-angstrom-linux-gnueabi-gcc -std=gnu99 -g -O2 -Wall -Wextra -Werror -Wstrict-prototypes -Wmissing-prototypes   -c -o daemon/util.o daemon/util.c
arm-angstrom-linux-gnueabi-gcc -std=gnu99 -g -O2 -Wall -Wextra -Werror -Wstrict-prototypes -Wmissing-prototypes   -c -o daemon/debug.o daemon/debug.c
arm-angstrom-linux-gnueabi-gcc -std=gnu99 -g -O2 -Wall -Wextra -Werror -Wstrict-prototypes -Wmissing-prototypes   -c -o daemon/zytouch_usb.o daemon/zytouch_usb.c
arm-angstrom-linux-gnueabi-gcc -std=gnu99 -g -O2 -Wall -Wextra -Werror -Wstrict-prototypes -Wmissing-prototypes   -c -o daemon/zytouchd.o daemon/zytouchd.c
arm-angstrom-linux-gnueabi-gcc daemon/config.o daemon/util.o daemon/debug.o daemon/zytouch_usb.o daemon/zytouchd.o -lX11 -lXtst -lusb -lm -o zytouch-daemon
ocamlopt -cc arm-angstrom-linux-gnueabi-gcc -cclib -lcairo -cclib -lextlib -cclib -llablgtk2 -warn-error A -c -I +lablgtk2 -I +cairo -I +extlib -I calibrate calibrate/version.ml -o calibrate/version.cmx
ocamlopt -cc arm-angstrom-linux-gnueabi-gcc -cclib -lcairo -cclib -lextlib -cclib -llablgtk2 -warn-error A -c -I +lablgtk2 -I +cairo -I +extlib -I calibrate calibrate/util.ml -o calibrate/util.cmx
ocamlopt -cc arm-angstrom-linux-gnueabi-gcc -cclib -lcairo -cclib -lextlib -cclib -llablgtk2 -warn-error A -c -I +lablgtk2 -I +cairo -I +extlib -I calibrate calibrate/config.ml -o calibrate/config.cmx
ocamlopt -cc arm-angstrom-linux-gnueabi-gcc -cclib -lcairo -cclib -lextlib -cclib -llablgtk2 -warn-error A -c -I +lablgtk2 -I +cairo -I +extlib -I calibrate calibrate/orientation.ml -o calibrate/orientation.cmx
ocamlopt -cc arm-angstrom-linux-gnueabi-gcc -cclib -lcairo -cclib -lextlib -cclib -llablgtk2 -warn-error A -c -I +lablgtk2 -I +cairo -I +extlib -I calibrate calibrate/tscalibrate.ml -o calibrate/tscalibrate.cmx
ocamlopt -cc arm-angstrom-linux-gnueabi-gcc -cclib -lcairo -cclib -lextlib -cclib -llablgtk2 -warn-error A -cc arm-angstrom-linux-gnueabi-gcc -cclib -lcairo -cclib -lextlib -cclib -llablgtk2 -warn-error A -I +lablgtk2 -I +cairo -I +extlib -I calibrate extLib.cmxa str.cmxa unix.cmxa lablgtk.cmxa cairo_lablgtk.cmxa cairo.cmxa gtkInit.cmx calibrate/version.cmx calibrate/util.cmx calibrate/config.cmx calibrate/orientation.cmx calibrate/tscalibrate.cmx -o zytouch-calibrate
/usr/local/angstrom/arm/lib/gcc/arm-angstrom-linux-gnueabi/4.3.3/../../../../arm-angstrom-linux-gnueabi/bin/ld: /tmp/camlstartup71ef32.o: Relocations in generic ELF (EM: 3)
/usr/local/angstrom/arm/lib/gcc/arm-angstrom-linux-gnueabi/4.3.3/../../../../arm-angstrom-linux-gnueabi/bin/ld: /tmp/camlstartup71ef32.o: Relocations in generic ELF (EM: 3)
/tmp/camlstartup71ef32.o: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
File "caml_startup", line 1, characters 0-1:
Error: Error during linking
make: *** [zytouch-calibrate] Error 2

我被困在那个Relocations in generic ELF (EM: 3) error.

Makefile 看起来像这样:

(...)
OFLAGS = -cc ${CC} -cclib -lcairo -cclib -lextlib -cclib -llablgtk2 -warn-error A
OCAMLOPT = ocamlopt $(OFLAGS)

OCAML_INC =  -I +lablgtk2 -I +cairo -I +extlib -I calibrate
OCAML_LIBS = $(OCAML_INC) extLib.cmxa str.cmxa unix.cmxa lablgtk.cmxa cairo_lablgtk.cmxa cairo.cmxa gtkInit.cmx

(...)    
config.cmx: util.cmx
orientation.cmx: config.cmx
tscalibrate.cmx: version.cmx util.cmx orientation.cmx config.cmx

%.cmx : %.ml
        $(OCAMLOPT) -c $(OCAML_INC) $< -o $@

%.mli : %.ml
        $(OCAMLC) -i $(OCAML_INC) $+

As /usr/local/angstrom/arm/environment-setup leaves /usr/local/angstrom/arm/bin作为我的路径的第一个元素,我尝试用 ARM 版本替换一些程序

sudo ln -s /usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-ar /usr/local/angstrom/arm/bin/ar
sudo ln -s /usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-as /usr/local/angstrom/arm/bin/as
sudo ln -s /usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-ld /usr/local/angstrom/arm/bin/ld

然而更换后as,模块甚至无法编译

ocamlopt -cc arm-angstrom-linux-gnueabi-gcc -cclib -lcairo -cclib -lextlib -cclib -llablgtk2 -warn-error A -c -I +lablgtk2 -I +cairo -I +extlib -I calibrate calibrate/version.ml -o calibrate/version.cmx
/tmp/camlasm41bb77.s: Assembler messages:
/tmp/camlasm41bb77.s:31: Error: alignment too large: 15 assumed
/tmp/camlasm41bb77.s:35: Error: bad instruction `movl $camlVersion__3,%eax'
/tmp/camlasm41bb77.s:36: Error: bad instruction `movl %eax,camlVersion'
/tmp/camlasm41bb77.s:37: Error: bad instruction `movl $camlVersion__2,%eax'
/tmp/camlasm41bb77.s:38: Error: bad instruction `movl %eax,camlVersion+4'
/tmp/camlasm41bb77.s:39: Error: bad instruction `movl $camlVersion__1,%eax'
/tmp/camlasm41bb77.s:40: Error: bad instruction `movl %eax,camlVersion+8'
/tmp/camlasm41bb77.s:41: Error: bad instruction `movl $1,%eax'
/tmp/camlasm41bb77.s:42: Error: bad instruction `ret'
/tmp/camlasm41bb77.s:43: Error: unrecognized symbol type ""
File "calibrate/version.ml", line 1, characters 0-1:
Error: Assembler error, input left in file /tmp/camlasm41bb77.s
make: *** [calibrate/version.cmx] Error 2

我很确定这一定是一个非常愚蠢的错误,但我找不到有关如何正确执行此操作的文档。有谁知道什么可能会失败?

可以找到我尝试构建的驱动程序的源代码here http://www.mega-nerd.com/Zytouch/.


ocaml 目前不支持交叉编译,并且传递 -cc 选项不会使其神奇地交叉编译到arm。有一些补丁使之成为可能,但没有官方的。我记得使用修补过的 ocamlopt,它对于简单的程序来说工作正常。但在这种情况下,您还需要交叉编译所有依赖库,这可能是一项艰巨的任务。

我认为你最好的解决方案是:

  • 在arm qemu中本地构建(这很容易,有预构建的debian镜像可用的 http://www.aurel32.net/info/debian_arm_qemu.php)

  • 构建校准应用程序的字节码二进制文件(字节码可以在架构之间移植,但需要在目标上安装相同版本的 ocaml)并在arm上安装所需的存根库(包含用于绑定到gtk、cairo等的C代码的库)(构建本地或来自包)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为 ARM 交叉编译 ocaml 应用程序 的相关文章

  • 为 Windows 98 编译 Qt

    我需要支持 Windows 98 Qt 文档声称这是可能的 但没有说明 Qt 4 6 的分布式二进制文件不能在 Win98 上运行 而且我采样的大多数 Qt 应用程序也不能在 Win98 上运行 对于几个确实在 98 上运行的应用程序 我询
  • 架构armv7的重复符号

    尝试在我现有的应用程序中使用 Layar SDK 时出现以下错误 我该如何解决这个问题 Ld Users pnawale Library Developer Xcode DerivedData hub afxxzaqisdfliwbzxbi
  • 如何获取结构体中任意成员的位位置

    如何获取结构体中任意成员的位位置 在示例中 gt typedef struct BitExamStruct unsigned int v1 3 unsigned int v2 4 unsigned int v3 5 unsigned int
  • 在 Mac OSX 上交叉编译 x86_64-unknown-linux-gnu 失败

    我尝试将我的 Rust 项目之一编译到 x86 64 unknown linux gnu 目标 cargo build target x86 64 unknown linux gnu Compiling deployer v0 1 0 fi
  • Raspberry 交叉编译 - 执行程序以“分段错误”结束

    我有一个自己编写的程序 我想从我的 x86 机器上为 Raspberry Pi 构建它 我正在使用 eclipse 生成的 makefile 并且无法更改此内容 我已经阅读了 CC for raspi 的教程 Hackaday 链接 htt
  • 用于交叉编译的`./configure`选项?

    据我所知 configure脚本是用 GNU 生成的Autoconf 我不知道Autoconf根本不 这些工具如何工作以及如何使用它 configure制作源代码以进行交叉编译的脚本 这是一篇关于如何交叉编译的非常好的小文章 http li
  • OCaml 前向声明

    有没有办法在 OCaml 中进行 C 风格的前向声明 我的问题是我有两个相互引用的变体 type path formula Next of state formula Until of state formula state formula
  • 所有可能的 GOOS 价值?

    如果我做对了 GOOS在编译源代码时确定 为了更好地支持多个操作系统 我感兴趣的是GOOS可能 当然 Go 是开源的 所以它可能有无限的可能性 所以我真正想要的是一个 通用列表 已知值为 windows linux darwin or fr
  • ARM 汇编:从 STDIN 获取字符串

    我目前正在学习 CS 课程 我们刚刚开始在 Raspberry Pi 上使用 ARM Assembly 事实证明这相当困难 想知道是否有人可以提供帮助 我当前的任务是从 stdin 获取一个字符串 使用 scanf 并计算其中的字符数 然后
  • /usr/bin/as:无法识别的选项“-EL”

    因此 在为我的1plus手机编译android内核时 经过3天的多次尝试 我放弃了并尝试在这里询问是否有人以前遇到过这个问题 这个错误对我来说有点模糊 但我觉得问题来自于我最近对 GNU Linux 发行版 Gentoo 的更改 它在不应该
  • 将 C 函数与 ARM 汇编结合使用

    我见过人们在代码中使用 C 库中的 printf 的示例 如下所示 data balign 4 hello asciz Hello n text global main func main main ldr r0 hello msg bl
  • 已编译 LKM 的互换性

    是否可以使用可加载内核模块 编译为3 0 8 mod unload ARMv5 我自制的内核 在具有版本的内核中3 0 31 gd5a18e0 SMP preempt mod unload ARMv7 安卓股票内核 该模块本身几乎不包含任何
  • 了解带有 pc 偏移的 Cortex-M 组件 LDR

    我正在查看这段 C 代码的反汇编代码 define GPIO PORTF DATA R volatile unsigned long 0x400253FC int main void Initialization code while 1
  • 如何在 arago 项目构建中编写自己的食谱包

    我如何在 arago 项目构建中编写自己的食谱包 我知道它可以是 bitbake 文件 但我怎么写 不知道 我在互联网上搜索 但未能找到任何好的来源 有人可以给我提供链接或示例来开始吗 RegardsLinux 学习者 使用 Bitbake
  • 使用cmake交叉编译gRPC

    我正在尝试使用 cmake 交叉编译 gRPC 我实际上做到了 不幸的是 我的方法涉及在 CMakeLists txt 内部进行修改 问题是 当我尝试编译 gRPC 时 它使用的是他刚刚编译的 protobuffer 它无法在 x86 计算
  • 在 OCaml 中,这是什么类型定义:'a.单位 -> 'a

    问题 这是我第一次看到像这样的类型定义 a unit gt a in 记录中的显式多态类型 https stackoverflow com questions 23320990 explicit polymorphic type in re
  • 在LPC2148 ARM处理器上创建中断向量的汇编代码

    我最近刚刚开始使用 LPC2148 ARM 处理器 我试图理解一些有关创建中断向量的汇编代码 这是代码 Runtime Interrupt Vectors Vectors b start reset start ldr pc undf un
  • 在 ARM Cortex-M3 中使用 newlib 的 malloc

    我正在为 ARM Cortex M3 NXP 的 LCP17xx 创建代码 到目前为止我一直在使用静态内存 一切都运行良好 我尝试添加动态内存支持 但是一旦调用 malloc 系统就会卡住 我正在使用 gcc 为 Arm Bare Meta
  • 触摸屏书写时需要注意什么?

    我正在启动一个新项目 其中涉及为机器开发一个接口 用于测量镜片的楔形和圆度 并将信息存储在数据库中并生成报告 我们很有可能会在这台机器上安装触摸屏 这样它就不需要鼠标或键盘了 我没有任何开发全尺寸触摸屏的经验 所以我正在向你们寻求建议 提示
  • 如何获取原始触摸屏数据?

    我知道我可以在 iPhone 应用程序中获取触摸事件 但这些触摸事件都被我过滤掉了 如果我将设备按在脸上 它会过滤掉这些触摸事件 因为它可以检测到它不是手指 我如何获得原始触摸事件 而不以任何方式过滤 没有用于此目的的公共 API 您可以获

随机推荐

  • anaconda python 导入 theano 时出错

    我对 python 很陌生 当然我对 Theano 也很陌生 我试图在 Windows 下与 anaconda python 一起使用它 我已经安装了所有强制要求 除了 CUDA 因为在这台笔记本电脑上我没有 NVIDIA GPU 我安装了
  • NSString 常量可以弱链接吗?

    NSString 常量可以弱链接吗 AVCaptureSessionPresetiFrame960x540在 iOS 5 之前没有定义 我避免实际引用它 它在 gdb 中加载得很好 但是当我加载 ipa 时 它似乎在调用 main 之前在
  • 合并列表中的数据框[重复]

    这个问题在这里已经有答案了 这是早期的一个分支post https stackoverflow com questions 29981195 find top 10 and 10 20 decile entries from datafra
  • 如何在变异后将 t.test() 应用于多对列

    这个问题与此相关跨多列进行 T 检验或整理数据 https stackoverflow com questions 69951627 t tests across multiple columns or tidy the data 6995
  • MySQL GROUP BY NULL 和 EMPTY

    在 MySQL 查询中我正在执行GROUP BY带有文本字段 由于原始数据的性质 某些行包含该字段的空字符串 而其他行则为 truenull 分组时 如何将空字符串和 null 分组在一起 将两者视为null 这可以通过 SELECT CA
  • 从“控制数组”创建控制?

    我有一系列图片框 如下所示 Dim pieces 500 As PictureBox pieces 1 New PictureBox With pieces 1 CreateControl Visible True BackColor Co
  • 具有相同 CIDR 块的多个 VPC 和子网

    我意识到我可以使用相同的 CIDR 块创建多个 AWS VPC 和子网 我不确定其背后的原理是什么以及它是如何实现的 AWS VPC 可以存在于私有 RFC 1918 https www rfc editor org rfc rfc1918
  • 使用嵌入式 Jetty 对 servlet 进行单元测试

    我们如何使用嵌入式 Jetty 服务器对 servlet 进行单元测试 比如下面的servlet方法如何测试 protected void doGet HttpServletRequest request HttpServletRespon
  • .NET:如何跨平台设置“扩展文件属性”?

    我需要阅读并修改扩展文件属性 https en wikipedia org wiki Extended file attributes在必须在 Windows 和 Linux 上运行的 NET 5 控制台应用程序中 假设文件系统支持这些属性
  • Bootstrap 3.0 - 包含固定列大小的流体网格

    我正在学习如何使用 Bootstrap 目前 我正在艰难地进行布局 虽然 Bootstrap 非常酷 但我看到的一切似乎都过时了 对于我的生活 我有一个我认为是我无法弄清楚的基本布局 我的布局如下所示 240px 160px All Rem
  • 带有 OR 条件的原则 findBy

    是否可以使用OR教义中的声明findBy 方法 我知道给定的数组被解释为case1 AND case2 像这样 this gt repos notif gt findBy array status gt 1 status gt 2 stat
  • 如何使用 bash 脚本编辑 XML?

  • 使用 oauth 登录 Facebook 在实时服务器上失败

    我正在使用 OAuthWebSecurity 通过 facebook 登录 它正在本地主机上运行 但是 然后部署到实时服务器时 我收到以下错误消息 远程服务器返回错误 400 错误请求 我已检查 Facebook 上的域名详细信息是否正确
  • 如何确定 MySQL 5.1 中索引的大小?

    如何确定 MySQL 5 1 中索引的大小 is this http dev mysql com doc refman 5 1 en show table status html你需要什么 从这里 https stackoverflow c
  • postgres 不知道在哪里可以找到服务器配置文件

    我已经安装了 PostgreSQL 但是当我运行命令时postgres在Windows CMD中 它给出以下错误 postgres does not know where to find the server configuration f
  • qpython android IOError: [Erno 2] 没有这样的文件或目录

    我试图从 qpython 中的简单 python 脚本调用图像 但收到错误消息 qpython android IOError Erno 2 No such file or directory 我想知道我是否使用了正确的目录约定 这是代码
  • C# 泛型用户控件

    我想定义以下控件 public partial class ObjectSelectorControl
  • jQuery AJAX 类型:'GET',传值问题

    我有一个类型为 GET 的 jQuery AJAX 调用 如下所示 ajax type GET url createUser data userId 12345 userName test success function data ale
  • 聚集索引和非聚集索引实际上意味着什么?

    我对 DB 的接触有限 并且仅作为应用程序员使用过 DB 我想了解Clustered and Non clustered indexes 我用谷歌搜索 发现的是 聚集索引是一种特殊类型的索引 它重新排序的方式 表中的记录是物理上的 存储 因
  • 为 ARM 交叉编译 ocaml 应用程序

    我正在交叉编译一个触摸屏驱动程序 它附带一个 ocaml 校准应用程序 我正在尝试编译 ARM 的驱动程序和应用程序 特别是运行 Angstr m 的 Beagleboard 事情是这样的 raziel Bebop zytouch driv