- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我为 ARM 嵌入式设备(运行 DD-WRT 的 Asus RT-AC68U 路由器)交叉编译了一个小的 Hello World 程序:
# arm-linux-gnueabi-g++ hello.cpp -mcpu=cortex-a9 -s -o hello
文件看起来不错:
# file hello
hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV),
dynamically linked (uses shared libs), for GNU/Linux 2.6.32,
BuildID[sha1]=5099693c31154cdd7f04c16ced5b80b1e35e625b, stripped
它依赖于几个库:
# readelf -d hello
Dynamic section at offset 0xf08 contains 26 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libstdc++.so.6]
0x00000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x00000001 (NEEDED) Shared library: [libc.so.6]
(...)
当我尝试在目标系统上执行该文件时,我得到以下信息:
# ./hello
-sh: ./hello: not found
如果我在没有任何其他参数的情况下从 ld-linux.so.3
启动执行,一切正常:
# /opt/lib/ld-linux.so.3 ./hello
Hello, world.
当列出库时,文件似乎在/lib 文件夹中搜索库(它们不在那里,它们在/opt/lib 中):
# /opt/lib/ld-linux.so.3 --list ./hello
libstdc++.so.6 => /lib/libstdc++.so.6 (0x76dfb000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x76de0000)
libc.so.6 => /opt/lib/libc.so.6 (0x76cb2000)
libc.so => /lib/libc.so (0x76c35000)
/lib/ld-linux.so.3 => /opt/lib/ld-linux.so.3 (0x76f20000)
我猜这个错误是由于可执行文件在单独启动时没有找到所需的共享库。所有必需的库都存在于/opt/lib 文件夹中,并且该文件夹包含在 LD_LIBRARY_PATH 环境变量中:
# echo $LD_LIBRARY_PATH
/lib:/usr/lib:/jffs/lib:/jffs/usr/lib:/jffs/usr/local/lib
:/mmc/lib:/mmc/usr/lib:/opt/lib:/opt/usr/lib
如何让可执行文件在正确的位置找到库?
编辑:我尝试在可执行文件中静态链接库,程序在目标平台上运行良好。但是,对于我想做的事情,这不是一个可行的解决方案。
最佳答案
你的 ld-linux.so.3
似乎位于非标准位置 ( /opt/lib
),并且您的 gcc
可能正在指定一个不同的程序解释器。您可以使用 readelf -l <program>
检查您的二进制文件期望的程序解释器(在 PT_INTERP
下,“请求程序解释器”)。
如果二进制程序解释器对于您的平台是错误的,您可以通过传递 -Wl,--dynamic-linker=/opt/lib/ld-linux.so.3
来手动指定它。至 gcc
.
关于c++ - 有效的 ARM 可执行文件找不到库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34708365/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!