在 poky 上首次尝试编译 core-image-minimal。`Build Configuration:BB_VERSION = \'1.44.0\'BUILD_SYS = \'x86_64-linux\'NATIVELSBSTRING ...
在 poky 上第一次尝试编译 core-image-minimal。
`Build Configuration:
BB_VERSION = "1.44.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "universal"
TARGET_SYS = "x86_64-poky-linux"
MACHINE = "qemux86-64"
DISTRO = "poky"
DISTRO_VERSION = "3.0.4"
TUNE_FEATURES = "m64 core2"
TARGET_FPU = ""
meta
meta-poky
meta-yocto-bsp = "<unknown>:<unknown>"`
编译期间出现错误并且编译失败:
`ERROR: qemu-native-4.1.0-r0 do_compile: oe_runmake failed
ERROR: qemu-native-4.1.0-r0 do_compile: Execution of '/home/build/tmp/work/x86_64-linux/qemu-native/4.1.0-r0/temp/run.do_compile.4889' failed with exit code 1:
make[1]: Entering directory '/home/build/tmp/work/x86_64-linux/qemu-native/4.1.0-r0/qemu-4.1.0/slirp'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/home/build/tmp/work/x86_64-linux/qemu-native/4.1.0-r0/qemu-4.1.0/slirp'
CXX disas/nanomips.o
g++: fatal error: Killed signal terminated program cc1plus
compilation terminated.
make: *** [/home/build/tmp/work/x86_64-linux/qemu-native/4.1.0-r0/qemu-4.1.0/rules.mak:94: disas/nanomips.o] Error 1
make: *** Deleting file 'disas/nanomips.o'
WARNING: /home/build/tmp/work/x86_64-linux/qemu-native/4.1.0-r0/temp/run.do_compile.4889:1 exit 1 from 'exit 1'
ERROR: Logfile of failure stored in: /home/build/tmp/work/x86_64-linux/qemu-native/4.1.0-r0/temp/log.do_compile.4889`
**无法找到该问题的适当解决方案。是否存在我需要注意的版本不匹配?
提前致谢。**
我尝试安装 cmake,检查 g++ 版本。没有帮助。
在同一个系统上很有可能存在多个版本的 glibc(我们每天都这样做)。
但是,您需要知道 glibc 由许多部分组成(200 多个共享库),所有部分都必须匹配。其中一个部分是 ld-linux.so.2,它 必须与 libc.so.6 匹配,否则您将看到所看到的错误。
ld-linux.so.2 的绝对路径在链接时被硬编码到可执行文件中,并且在链接完成后不能轻易更改(更新:可以使用 patchelf ;请参阅 答案 )。
要构建可与新 glibc 一起使用的可执行文件,请执行以下操作:
g++ main.o -o myapp ... \
-Wl,--rpath=/path/to/newglibc \
-Wl,--dynamic-linker=/path/to/newglibc/ld-linux.so.2
链接 -rpath
器选项将使运行时加载器搜索库 /path/to/newglibc
(因此您不必 LD_LIBRARY_PATH
在运行它之前进行设置),并且该 -dynamic-linker
选项将“烘焙”路径以更正 ld-linux.so.2
到应用程序中。
如果您无法重新链接 myapp
应用程序(例如,因为它是第三方二进制文件),则不会丢失所有内容,但会变得更加棘手。一种解决方案是 chroot
为其设置适当的环境。另一种可能性是使用 rtldi 和 二进制编辑器 .
更新: 或者您可以在现有二进制文件上使用 patchelf 将它们重定向到备用 libc。