我正在尝试从命令行交叉编译ARMv7目标的简单java示例.
我需要为交叉编译添加哪些javac选项?
这是在主机上编译的标准javac命令:
javac -d bin -sourcepath src src/TextPanel.java
Run Code Online (Sandbox Code Playgroud) 我有一个基于GTK的ARM项目,历史上是在32位Ubuntu虚拟机上开发的.目前,我正在尝试将其迁移到新的64位Arch Linux开发盒.我不知道如何处理我所采取的两条路线所产生的错误.
如果我告诉链接器使用/ usr/lib,编译将停止告诉我
/usr/lib/librt.so: file not recognized: File format not recognized
Run Code Online (Sandbox Code Playgroud)
因此,假设这是一个32位vs 64位的问题,我将gcc指向/ usr/lib32并收到以下内容
/usr/bin/arm-linux-gnueabi - ld: skipping incompatible /usr/lib32/librt.so when searching for -lrt
/usr/bin/arm-linux-gnueabi - ld: skipping incompatible /usr/lib32/librt.a when searching for -lrt
/usr/bin/arm-linux-gnueabi - ld: skipping incompatible /usr/lib32/libpthread.so when searching for -lpthread
/usr/bin/arm-linux-gnueabi - ld: skipping incompatible /usr/lib32/libpthread.a when searching for -lpthread
/usr/bin/arm-linux-gnueabi - ld: cannot find -lz
/usr/bin/arm-linux-gnueabi - ld: cannot find -lsqlite3
/usr/bin/arm-linux-gnueabi - ld: cannot find -lusb-1.0
/usr/bin/arm-linux-gnueabi - ld: cannot find -lssl
Run Code Online (Sandbox Code Playgroud)
等等.我尝试从Arch存储库安装lib32-sqlite无济于事. …
似乎两者都是出于各种原因使用,ARM用于功耗,x86用于扩展功能.
我仍然很好奇,因为我的计算机科学文化有点空洞,像x86(或其前辈)这样的CISC芯片的真正目的是什么.
如果他们使用RISC,我们的计算机会更好吗(例如,如果微软将其内核和工具链移植到RISC,如MIPS或ARM)?或者作为一项任务完成任务是不可能的?
我正在阅读CISC的目的是能够接近更高级别的语言,我觉得这很奇怪.英特尔和微软之间是否有交易专注于x86?
假设我在汇编中有两个相同算法的实现.我想通过检查一个更快的两个代码片段代码来了解.
我认为可以考虑的参数是:操作码的数量,分支的数量,功能帧的数量.
我的问题是:
- 我可以假设每个操作码执行是一个周期吗?
- 打破管道的分支的开销是多少?
- 调用函数有什么影响和开销?
- ARM和x86之间的分析有区别吗?
问题是理论性的,因为我有两个实现; 一个130指令长,一个是184指令长.
我想知道130指令长片段是否比184指令长实现速度更快是否正确?
我正在尝试编写一个更好的版本的OpenCV的cv :: resize(),我来了一个代码在这里:https://github.com/rmaz/NEON-Image-Downscaling/blob/master /ImageResize/BDPViewController.m 该代码用于将图像下采样2但我无法获得算法.我想首先将该算法转换为C然后尝试修改它以用于学习目的.是否也可以将其转换为任何尺寸的缩减示例?
功能是:
static void inline resizeRow(uint32_t *dst, uint32_t *src, uint32_t pixelsPerRow)
{
const uint32_t * rowB = src + pixelsPerRow;
// force the number of pixels per row to a multiple of 8
pixelsPerRow = 8 * (pixelsPerRow / 8);
__asm__ volatile("Lresizeloop: \n" // start loop
"vld1.32 {d0-d3}, [%1]! \n" // load 8 pixels from the top row
"vld1.32 {d4-d7}, [%2]! \n" // load 8 pixels from the bottom row
"vhadd.u8 q0, q0, …Run Code Online (Sandbox Code Playgroud) 我发现ptrace将在__ptrace.S中使用__ptrace及其代码,如下所示:
ENTRY(__ptrace)
.save {r4, r7}
stmfd sp!, {r4, r7}
ldr r7, =__NR_ptrace
swi #0
ldmfd sp!, {r4, r7}
movs r0, r0
bxpl lr
b __set_syscall_errno
END(__ptrace)
Run Code Online (Sandbox Code Playgroud)
我不知道的是这个过程如何继续在swi#0和r7在这里做什么?
谢谢你的任何提示.
好的,这可能是一个非常笼统的问题,但是我不熟悉该主题,也很高兴获得任何提示。
我有一个来自SoucereyCodeBench的ARM交叉编译工具链(arm-xilinx-linux-gnueabi-)。我交叉编译了一个使用编译器选项的库:-DSC_INCLUDE_FX -DSC_USE_PTHREADS -pthreads -fPIC -DPIC
因此,如果我想将库用于裸机程序,那么我会为裸机编译器(arm-xilinx-eabi-)需要pthreads吗?
否则我的程序可能首先不会运行或编译。那么可以为裸机编译pthread吗?
我知道汇编程序语言有很多版本,例如x86,ARM,MIPS,Motorola等,它们可以在各种体系结构上运行。但是,为什么呢?组装如何工作?为什么不能在不同体系结构上使用一个版本的程序集。在最简单的层次上,我们当然只是在处理电流,那么为什么会有这种限制,这些架构甚至有什么不同?
此外,假设我想制作一个运行在自定义体系结构上的操作系统-这是我创建的。然后,我将不得不创建自己的汇编语言吗?创建操作系统是否需要汇编语言吗?
我的一些代码引用了一个使用arm_neon.h的库; 当我尝试使用"模拟器"编译时,我收到了一堆错误.
我正在使用LLVM 4.2编译器,我该怎么做才能用arm neon编译它?
我想比较2 int8x8_t,从http://gcc.gnu.org/onlinedocs/gcc/ARM-NEON-Intrinsics.html
我们可以得到描述vclt_s8,但它没有告诉我们太多的细节.
`uint8x8_t vclt_s8 (int8x8_t, int8x8_t)`
Run Code Online (Sandbox Code Playgroud)
预期指令的形式:vcgt.s8 d0,d0,d0
返回值uint8x8_t,它让我感到困惑,因为我无法
if(vclt_s8(a, b))决定第一个是否更小.
那么假设我们有两个int8x8_t:int8x8_t a而且int8x8_t b,我们怎么知道它是否a更小?