Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从Windows交叉编译GNU ARM(BeagleBoneBlack)。*.elf上的运行时错误:";没有这样的文件或目录;_C++_Linux_Cross Compiling_Beagleboneblack_Toolchain - Fatal编程技术网

C++ 从Windows交叉编译GNU ARM(BeagleBoneBlack)。*.elf上的运行时错误:";没有这样的文件或目录;

C++ 从Windows交叉编译GNU ARM(BeagleBoneBlack)。*.elf上的运行时错误:";没有这样的文件或目录;,c++,linux,cross-compiling,beagleboneblack,toolchain,C++,Linux,Cross Compiling,Beagleboneblack,Toolchain,我正在(非常)早期的阶段开发一个无人机飞行控制器在一个BeagleBone Black上。我应该提到的是,对于BBB、Linux和嵌入式系统,我是个新手。我的学术重点一直是控制理论——这是我第一次尝试在Matlab仿真之外的实际实现。我目前的制度如下: 主机->运行Eclipse Luna(4.4.0)的Windows 8.1 x64 目标->小猎犬骨黑色版本。B运行Ubuntu13.10 目标信息 root@arm:~# uname -a Linux arm 3.8.13-bone32 #1

我正在(非常)早期的阶段开发一个无人机飞行控制器在一个BeagleBone Black上。我应该提到的是,对于BBB、Linux和嵌入式系统,我是个新手。我的学术重点一直是控制理论——这是我第一次尝试在Matlab仿真之外的实际实现。我目前的制度如下:

主机->运行Eclipse Luna(4.4.0)的Windows 8.1 x64
目标->小猎犬骨黑色版本。B运行Ubuntu13.10

目标信息

root@arm:~# uname -a
Linux arm 3.8.13-bone32 #1 SMP Fri Dec 13 20:05:25 UTC 2013 armv7l armv7l         armv7l GNU/Linux
目标gcc版本

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/4.8/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.8.1-10ubuntu9' --with-bugurl=file:///usr/shar
e/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8
 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --w
ith-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enabl
e-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libitm --disable-libquadmath --ena
ble-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr
/lib/jvm/java-1.5.0-gcj-4.8-armhf/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-armhf --
with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-armhf --with-arch-directory=arm --with-ecj-jar=/usr/share/ja
va/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --enable-multilib --disable-sjlj-exceptions --with-arch=armv7-
a --with-fpu=vfpv3-d16 --with-float=hard --with-mode=thumb --disable-werror --enable-checking=release --build=arm-lin
ux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
Thread model: posix
gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu9)
我已经安装了工具链,正在使用。我已经根据Michael Jantz提供的教学视频设置了Eclipse环境(由于限制删除了链接-如果感兴趣,请在YouTube上搜索“交叉编译并远程浏览BeagleBone”),并对其进行了一些小调整,以使其在我的系统上运行。这些调整主要包括删除“-specs=rdimon.specs”和“-lrdimon”链接标志,因为我在编译时一直得到“没有这样的文件或目录”。删除这两个标志后,简单的“Hello ARM World”程序编译时不会出现任何问题

将编译后的ELF文件传输到my BeagleBone后,通过以下方式设置权限和可执行标志:

chmod ugo-x Test6.elf
并通过以下方式运行:

./Test6.elf
我得到以下信息:

root@arm:/home/ubuntu/RDKTestProgs# ./Test6.elf
bash: ./Test6.elf: No such file or directory
我最初认为我的64位主机系统和32位GNU Make之间的不匹配不应该是一个问题,但是为了消除我的疑虑,我找到了一个64位GNU Make文件(由于限制而删除了链接),尽管我不确定它的完整性。在任何情况下,当试图在BBB上执行程序时,两个GNU Make文件都会产生相同的结果

在浏览了几篇文章之后,我发现了“readelf”、“strace”和“strings”工具,它们产生了以下输出

Readelf:

root@arm:/home/ubuntu/RDKTestProgs# readelf -d Test6.elf 
 Dynamic section at offset 0x858 contains 27 entries:
 Tag        Type                         Name/Value
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
 0x00000001 (NEEDED)                     Shared library: [libstdc++.so.6]
 0x00000001 (NEEDED)                     Shared library: [libm.so.6]
 0x00000001 (NEEDED)                     Shared library: [libgcc_s.so.1]
 0x0000000c (INIT)                       0x8550
 0x0000000d (FINI)                       0x87a0
 0x00000019 (INIT_ARRAY)                 0x10848
 0x0000001b (INIT_ARRAYSZ)               8 (bytes)
 0x0000001a (FINI_ARRAY)                 0x10850
 0x0000001c (FINI_ARRAYSZ)               4 (bytes)
 0x00000004 (HASH)                       0x8168
 0x00000005 (STRTAB)                     0x82bc
 0x00000006 (SYMTAB)                     0x81bc
 0x0000000a (STRSZ)                      444 (bytes)
 0x0000000b (SYMENT)                     16 (bytes)
 0x00000015 (DEBUG)                      0x0
 0x00000003 (PLTGOT)                     0x10958
 0x00000002 (PLTRELSZ)                   72 (bytes)
 0x00000014 (PLTREL)                     REL
 0x00000017 (JMPREL)                     0x8508
 0x00000011 (REL)                        0x84f8
 0x00000012 (RELSZ)                      16 (bytes)
 0x00000013 (RELENT)                     8 (bytes)
 0x6ffffffe (VERNEED)                    0x8498
 0x6fffffff (VERNEEDNUM)                 3
 0x6ffffff0 (VERSYM)                     0x8478
 0x00000000 (NULL)                       0x0
root@arm:/home/ubuntu/RDKTestProgs# strings Test6.elf
/lib/ld-linux.so.3
libc.so.6
abort
__libc_start_main
__aeabi_atexit
libstdc++.so.6
__gmon_start__
_Jv_RegisterClasses
_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
_ITM_deregisterTMCloneTable
_ITM_registerTMCloneTable
_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
_ZNSt8ios_base4InitD1Ev
_ZNSolsEPFRSoS_E
_ZNSt8ios_base4InitC1Ev
_ZSt4cout
libm.so.6
libgcc_s.so.1
__aeabi_unwind_cpp_pr0
__aeabi_unwind_cpp_pr1
GLIBCXX_3.4
GCC_3.5
GLIBC_2.4
?8FAFJF
x`9`{h
Hello ARM World!
战略:

root@arm:/home/ubuntu/RDKTestProgs# strace ./Test6
strace: Can't stat './Test6': No such file or directory
root@arm:/home/ubuntu/RDKTestProgs# strace ./Test6.elf
execve("./Test6.elf", ["./Test6.elf"], [/* 22 vars */]) = -1 ENOENT (No such file or directory)
write(2, "strace: exec: No such file or di"..., 40strace: exec: No such file or directory
) = 40
exit_group(1)                           = ?
+++ exited with 1 +++
字符串:

root@arm:/home/ubuntu/RDKTestProgs# strings Test6.elf
/lib/ld-linux.so.3
libc.so.6
abort
__libc_start_main
__aeabi_atexit
libstdc++.so.6
__gmon_start__
_Jv_RegisterClasses
_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
_ITM_deregisterTMCloneTable
_ITM_registerTMCloneTable
_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
_ZNSt8ios_base4InitD1Ev
_ZNSolsEPFRSoS_E
_ZNSt8ios_base4InitC1Ev
_ZSt4cout
libm.so.6
libgcc_s.so.1
__aeabi_unwind_cpp_pr0
__aeabi_unwind_cpp_pr1
GLIBCXX_3.4
GCC_3.5
GLIBC_2.4
?8FAFJF
x`9`{h
Hello ARM World!
我在我的BeagelBoneBlack中搜索“readelf”中指示的4个共享库文件但问题是,其中一些文件位于usr/lib/arm-linux-gnueabihf/目录中,而其他文件位于/lib/arm-linux-gnueabihf#目录中。为了解决这个问题,我创建了指向/usr/lib/arm-linux-gnueabihf/目录中找不到的文件的符号链接。这仍然没有解决问题我没有解决这个问题。所以我创建了指向/lib/arm-linux-gnueabihf/目录中找不到的文件的符号链接。同样,运气不好

有没有办法检查执行时使用的是哪个目录?Test6.elf文件可能还缺少什么?我现在不知所措。任何建议或指导都将不胜感激!干杯

另外,我还设法检查了GLIBCXX_3.4、GLIBC_2.4和GCC_3.5,如下所示,但同样,其中一些与/usr/lib/arm-linux-gnueabihf中的文件有关,另一些在/lib/arm-linux-gnueabihf中找到。再次感谢

root@arm:/lib/arm-linux-gnueabihf# strings libgcc_s.so.1 | grep GCC
GCC_3.0
GCC_3.3
GCC_3.3.1
GCC_3.3.4
GCC_3.4
GCC_3.4.2
GCC_4.0.0
GCC_4.2.0
GCC_4.3.0
GCC_4.7.0
GCC_3.5

root@arm:/usr/lib/arm-linux-gnueabihf# strings libstdc++.so.6.0.18 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBC_2.4
GLIBC_2.17
GLIBCXX_DEBUG_MESSAGE_LENGTH
最后,这里是“Hello ARM World”节目

//============================================================================
//名称:main.cpp
//作者:RDK
//版本:
//版权:您的版权声明
在C++中的Hello World
//============================================================================
#包括
使用名称空间std;
//
//在标准输出上打印问候语并退出。
//
//在嵌入式平台上,这可能需要半托管或类似的服务。
//
//例如,对于源自GNU Tools For Embedded的工具链,
//要启用半托管,已将以下内容添加到链接器:
//
//--specs=rdimon.specs-Wl,--开始组-lgcc-lc-lc-lm-lrdimon-Wl,--结束组
//
//针对其他工具链进行调整。
//
int
main()
{

没问题!所以我已经让它工作了。下面是我的步骤,希望它们是合理的,不会在将来给我带来问题

  • 从中,我试图找出Test6.elf希望在哪里找到用于动态链接库的linux加载程序。这产生了:

    root@arm:/home/ubuntu/RDKTestProgs#readelf-l./Test6.elf | grep ld linux
    [请求程序解释器:/lib/ld linux.so.3]

  • 我检查了我的
    /lib
    文件夹,果然
    ld-linux.so.3
    文件不见了。相反,我在
    /lib/arm-linux-gnueabihf/
    文件夹中找到了它

  • 因此,我通过以下方式在/lib文件夹中创建了一个符号链接:

    ln-s/lib/arm-linux-gnueabihf/ld-linux.so.3/lib/ld-linux.so.3

  • 砰的一声!它起作用了。但我仍然觉得奇怪的是,
    ldd./Test6.elf
    仍然返回:

     root@arm:/home/ubuntu/RDKTestProgs# ldd ./Test6.elf
     not a dynamic executable
    
    这有什么好的理由吗,或者这是正常的吗?-我觉得不太对

    我还注意到,我当前的浮点ABI编译器设置(以及工具链)设置为“软”,而我的BeagleBoneBlack运行的是arm linux gnueabihf-hard Float。这会在将来给我带来问题吗?我应该寻找其他工具链吗


    干杯!

    我在一个名为“ibstdc++.so.6”的库中遇到了类似的情况。我在Ubuntu 14.04上用Eclipse开发,并用Debian在beaglebone上部署。以前我在Eclipse Ubuntu 12.04上开发,并在阿姆斯特朗上部署时,从未遇到过这个问题


    我解决问题的方法是阅读上面的Anwser,我所做的是将交叉编译器设置为arm-linux-gnueabihf-g++。我缺少的库似乎只是包含在编译器的硬浮动版本中,而不是软浮动版本中。在Eclipse上更改交叉编译器设置,解决了问题。

    +1已校准但具体明确的问题。我猜您缺少二进制文件的一些动态链接库。请尝试使用
    ldd./Test6.elf
    ,查看是否有任何列出的库显示为缺少。谢谢@msandiford。是的,我也尝试过。我不确定这个结果是否有意义:
     root@arm:/home/ubuntu/RDKTestProgs# ldd ./Test6.elf
     not a dynamic executable