⑴ 关于交叉编译工具链的问题
核心转储是崩溃报告的一个过程,他只是把当前崩溃的信息转存出来方便差错。而且这个核心转储几个字也不过是个提示输出信息。这个提示不会给与任何与错误相关的内容,必须看其他的错误信息或者他转储出来的东西来分析。
不过核心转储,应该是程序运行出错而崩溃。这种问题出现在你正在运行的程序,而不是编译过程出现的编译错误(也就是说,出现核心转储应该就是 GCC 或者他调用的程序自己崩溃了)。出现这个问题的原因很多。
如果是因为没有找到某些 header 文件,不应该是核心转储错误,而是编译器或者某个过程提示错误信息后退出,他会输出错误信息告诉你问题所在。
至于你编译的这些东西版本都比较老,我建议还是尝试降级整个系统来编译、运行你现在的这些东西。或者升级你这个交叉编译工具链到当前主流的版本来用。
至于交叉工具连当中的 GCC 和你当前本机的 GCC,完全是两个互相独立的 GCC 。
只是他们编译输出的二进制程序针对的指令集不同而已。相对的 binutils 和 glibc 和 kernel-header 都是一样的意思,针对目标而输出的相关程序。当然 glibc 和 kernel-header 主要是以“数据”方式存在,gcc 和 binutils 主要是以可以运行的程序方式存在(当然不是绝对的,比如 gcc 还会提供几个 lib 相关的内容,不过大部分情况下你可以这么理解更直观了解他们的作用)。
一般说来 GCC 是编译器,binutils 是连接器,glibc 是标准 C 库(主要是连接时,连接器必须有目标的函数库文件,也就是 .so 文件,对应 Windows 是 .dll 文件。连接器把函数调用正确的挂接到对应的函数入口上)。linux header 就是 C 语言常见的 C header 文件和相关的开发数据。一般主要用来编译 glibc ,glibc 作为中间层来提供内核相关调用。当然程序有些时候也会直接调用内核函数,这样这些程序在编译时也需要 kernel 的 header 。
这两套东西一个输出你当前 PC 的程序,一个输出 ARM 的程序。两个 GCC 套装之间不能互相替换。只能自己输出属于自己的程序。
但是这两套程序虽然输出的程序不同,但可以运行的部分,却都是在你的计算机上运行。而且你本机的 GCC 因为可以输出本机的程序。所以你需要用他来输出在你本机运行,但是却输出 ARM 程序的 GCC 套装。
这就好比两个锤子,一个锤子用来打铁,一个锤子用来打锡。用途不同,但这两个锤子都是铁做的。
你作这个交叉编译工具链,就是用你手里已经有的打铁的锤子,打出一个用铁制作的用来打锡的锤子。这个打锡的锤子是不能打铁的,同样这个打铁的锤子是不能用来打锡的。
⑵ 交叉编译busybox显示libc.so.6丢失!
拷贝C 库
交叉应用程序的开发需要用到交叉编译的链接库,我们在移植应用程序到我们的目标板的时
候,需要把交叉编译的链接库也一起移植到目标板上,这里我们用到的交叉工具链的路径是
/usr/local/arm/...../,链接库的目录是/usr/local/arm/...../arm-linux/lib,将其中部分库文件及符号链接拷贝到root_nfs(你创建的busybox的根目录)文件夹下的lib文件夹中。
部分库文件及符号链接有:ld-2.3.2.so,ld-linux.so.2,libc-2.3.2.so,libc.so.6
⑶ linux下用交叉编译器编译时,已经指定了库的路径跟库的名字,可是还是报错找不到库。
看起来它不是个库,倒像是个可执行程序
一般so都放在lib这样的目录下,你这个是bin,而且和它在一起的都是可执行程序,并且它没有so后缀名。
⑷ 32位(i686)linux的ubuntu,交叉编译3.0.2的vsftp老出错
交叉编译环境或者编译之前的设置有问题。
当然还一个可能就是 vsftp 对交叉编译的支持不好。导致调用错了 so 函数库文件。
你这个提示明显的是调用了当前系统的 /lib/libpam.so.0 ,交叉编译环境,肯定不能调用这个 so 函数库文件。
⑸ 为什么.o链接未so库符号丢失了
o链接未so库符号丢失了原因交叉应用程序的开发需要用到交叉编译的链接库,我们在移植应用程序到我们的目标板。
链接库的目录是/usr/local/arm/arm-linux/lib,将其中部分库文件及符号链接拷贝到root_nfs(你创建的busybox的根目录)文件夹下的lib文件夹中。
extern:
extern是编程语言中的一种属性,它表征了变量、函数等类型的作用域(可见性)属性,是编程语言中的关键字。当进行编译时,该关键字告诉编译器它所声明的函数和变量已在其他文件中定义。
可以在本模块或者文件以及其他模块或文件中使用。通常,程序员会在 "*.c" 文件中声明定义变量或定义函数,并在“*.h”(头文件)中使用该关键字限定变量或函数等,然后可在该头文件或其他模块中include使用。
⑹ Linux下用交叉编译器编译报错缺少Libcso6【求教】
#打开/etc/ldsoconf,在最后一行添加/home/xassassin/armlinuxdev/bin/lib/$sudo vim /etc/ldsoconf#执行此命令,然后再编译$sudo ldconfigLinux下用交叉编译器编译报错缺少Libcso6【求教】
⑺ Linux下用交叉编译器编译报错缺少Libc.so.6【求教】
#打开/etc/ld.so.conf,在最后一行添加/home/xassassin/armlinuxdev/bin/lib/
$sudovim/etc/ld.so.conf
#执行此命令,然后再编译
$sudoldconfig
⑻ linux交叉编译Qt 失败
设置环境变量 export QT_DEBUG_PLUGINS=1
重新运行程序
Cannot load library /opt/Qt-5.12.4/plugins/platforms/libqxcb.so2
输入ldd /opt/Qt-5.12.4/plugins/platforms/libqxcb.so
显示缺少 libxkbcommon,并展示其路径。
然后将显示路径中的拷贝到需要的目录中。
⑼ 交叉编译时候怎么设置连接库的搜索路径
找不到libQtGui.so这个库,添加环境变量LIBRARY_PATH=/opt/Qt4.7/lib试试另外你使是用arm-linux-gcc编译程序,需要保证QT下的libQtGui.so库也是用arm-linux-gcc编译的,否则编译链接会出问题
⑽ ARM交叉编译时链接错误,提示collect2: ld returned 1 exit status,求解答
libVimbaC.so编译的不对, 使用arm gcc链接so命令:
arm-none-linux-gnueabi-gcc -o libVimbaC.so -shared ..... VimbaC.cpp
就可以编译出arm下用的动态库了.