二进制/ELF在不同的ARM系统上静默退出

二进制/ELF在不同的ARM系统上静默退出,arm,elf,armv7,cortex-a8,Arm,Elf,Armv7,Cortex A8,我有一个在armv7a Cortex-A9 CPU上编译的ELF。它在那里运行正常,没有任何问题,但当它移动到armv7a Cortex-A8 CPU上时,文件会以如下方式自动退出: casey@arm:~/Unreal/System$。/UCCLinux.bin.orig casey@arm:~/Unreal/System$ 我构建了自己的UCCLinux.bin,它使用Cortex A9 CPU中未更改的共享对象,执行效果良好。这让我相信,共享对象并没有什么问题,只是精灵本身有一些问题。然而

我有一个在armv7a Cortex-A9 CPU上编译的ELF。它在那里运行正常,没有任何问题,但当它移动到armv7a Cortex-A8 CPU上时,文件会以如下方式自动退出:

casey@arm:~/Unreal/System$。/UCCLinux.bin.orig casey@arm:~/Unreal/System$

我构建了自己的UCCLinux.bin,它使用Cortex A9 CPU中未更改的共享对象,执行效果良好。这让我相信,共享对象并没有什么问题,只是精灵本身有一些问题。然而,区分ld--verbose/readelf只显示了一个小的区别。在我构建的版本上,它需要一个不同的依赖项。ld linux armhf.so.3,其中as不存在并被libm.so.6替换;我有

工作系统上还有一条搜索路径让我感到困惑: 搜索目录(“/usr/armv7hl-suse-linux-gnueabi/lib”) armv7*h*l,gnueabi上没有hf。我不确定这是否意味着Ubuntu上的SuSE构建有什么意义,因为它们都是硬浮动的,可能只是语义

两个系统上的ldd输出与原始文件匹配。除了对依赖项的更改和一些相对较小的注释(可能来自不同发行版上的不同编译器),我完全不知所措

我从我构建的文件和提供给我的文件中获得了strace输出

好:

坏的:

我完全不知道为什么会发生这种情况,因为我尝试的所有其他小测试程序都工作得完美无缺。出于某种原因,这只是一个文件。用mtune=cortex-a8编译并没有改变任何东西,如果我们不得不发布一个带有“哦,顺便说一下,你必须编译自己的二进制文件才能运行这个东西”的构建,那将是一个彻底的失败。另外,我怀疑这可能会产生一些潜在的问题

相关{据我所知}编译器选项:

-三月=armv7-a-mtune=cortex-a9-mfloat abi=hard-mfpu=vfpv3-d16

FPU与两个CPU匹配,并且都是硬浮点armv7a

有什么想法吗

编辑:在Valgrind中找到一些新信息

-1929——从/home/casey/Unreal/System/UCCLinux.bin.orig(0x8000)读取符号 --1929——从/lib/arm-linux-gnueabi/ld-2.15.so(0x4000000)读取符号 --1929年——考虑/lib/arm-linux-gnueabi/ld-2.15.so。。 --1929-- .. CRC不匹配(计算c6793f6a和66aab705) --1929--对象没有符号表

valgrind:启动时出现致命错误:函数重定向 valgrind:对于此平台工具组合,这是必需的 valgrind:无法设置。重定向的详细信息如下: valgrind:一个必须重定向的函数 valgrind:其名称与模式匹配:memcpy valgrind:在soname匹配的对象中:ld linux.so.3 valgrind:在处理时未找到 valgrind:soname:ld linux.so.3中对象的符号


我的发行版既有硬浮动库也有软浮动库,尽管我认为它们是互斥的

您可以添加以下内容吗?:-每个目标上的发行版和版本。-每个目标上二进制文件上ldd的实际输出,与您对它的解释相反。感谢您的帮助。信息在下面的粘贴箱中。Cortex-A9{good}Cortex-A8{bad}您在这里失败了,
A4\0\0\0aeabi\0\1*\0\0\0\0057-a\0\6\n\7A\10\1\t\2\n\4\22\4\24\1\25\1\27\3\30\1\31\1\32\2\33\3\34\1\1\1\1
。一个版本喜欢这个,另一个不喜欢。那么,你可以在Cortex-A8上运行的一些程序也是如此。当然,您可以在您的开发主机上运行
armnonelinuxgnueabireadelf
。arm none linux gnueabi readelf不在开发系统上。哎呀,忘了添加我自己编译的程序。