【发布时间】:2023-08-27 00:15:01
【问题描述】:
我有以下程序:
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
//ostringstream s;
cout << "cpp test" << endl;
return 0;
}
我使用交叉编译器在 Ububtu 20.04 桌面上构建它:
arm-linux-gnueabihf-g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/cpp_test.d" -MT"src/cpp_test.o" -o "src/cpp_test.o" "../src/cpp_test.cpp"
arm-linux-gnueabihf-g++ -o "cpp_test" ./src/cpp_test.o
然后我将cpp_test复制到BeagleBone Black Wireless板并执行:
debian@beaglebone:~/c$ ./cpp_test
cpp test
debian@beaglebone:~/c$ ldd cpp_test
linux-vdso.so.1 (0xbee85000)
libstdc++.so.6 => /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 (0xb6ea1000)
libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0xb6e78000)
libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6d7e000)
libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0xb6d03000)
/lib/ld-linux-armhf.so.3 (0xb6fbe000)
现在我取消注释 ostringstream s; 行,构建程序,将其复制到 BeagleBone 并执行:
debian@beaglebone:~/c$ ./cpp_test
./cpp_test: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by ./cpp_test)
debian@beaglebone:~/c$ ldd cpp_test
./cpp_test: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by ./cpp_test)
linux-vdso.so.1 (0xbefa6000)
libstdc++.so.6 => /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 (0xb6e22000)
libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6d28000)
/lib/ld-linux-armhf.so.3 (0xb6f3f000)
libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0xb6cad000)
libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0xb6c84000)
来自董事会的其他信息:
debian@beaglebone:/usr/lib/arm-linux-gnueabihf$ ls -l | grep libstdc++.so.6
lrwxrwxrwx 1 root root 19 Apr 6 2019 libstdc++.so.6 -> libstdc++.so.6.0.25
-rw-r--r-- 1 root root 1019772 Apr 6 2019 libstdc++.so.6.0.25
debian@beaglebone:/usr/lib/arm-linux-gnueabihf$ uname -r
4.19.94-ti-r45
debian@beaglebone:/usr/lib/arm-linux-gnueabihf$ uname -a
Linux beaglebone 4.19.94-ti-r45 #1buster SMP PREEMPT Thu Jun 18 19:18:41 UTC 2020 armv7l GNU/Linux
debian@beaglebone:~$ 字符串 /usr/lib/arm-linux-gnueabihf/libstdc++.so.6.0.25 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
...
GLIBCXX_3.4.24
GLIBCXX_3.4.25
来自主机的附加信息:
alex@alex-u20:~$ arm-linux-gnueabihf-g++ -v 使用内置规范。 COLLECT_GCC=arm-linux-gnueabihf-g++ COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabihf/9/lto-wrapper 目标:arm-linux-gnueabihf 配置:../src/configure -v --with-pkgversion='Ubuntu 9.3.0-10ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs - -enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 - -enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls -- with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object -- disable-libitm --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --without-target-system-zlib --enable-libpth-m2 --enable-multiarch --enable-multilib --disable-sjlj-exceptions --with-arch=armv7-a --with-fpu=vfpv3-d16 --with-float=hard --with-mode=thumb - -disable-werror --enable-multilib --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-linux-gnueab ihf --program-prefix=arm-linux-gnueabihf---includedir=/usr/arm-linux-gnueabihf/include 线程模型:posix gcc 版本 9.3.0 (Ubuntu 9.3.0-10ubuntu1) alex@alex-u20:/usr/lib/x86_64-linux-gnu$ 字符串 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28 | grep GLIBCXX GLIBCXX_3.4 GLIBCXX_3.4.1 ... GLIBCXX_3.4.24 GLIBCXX_3.4.25 GLIBCXX_3.4.26 GLIBCXX_3.4.27 GLIBCXX_3.4.28最后,这个程序使用 qemu 在桌面上运行:
alex@alex-u20:~/tmp/cpp_test/Debug$ qemu-arm-static -L /usr/arm-linux-gnueabihf/ cpp_test
cpp test
电脑,主机和BB板,全面更新。
【问题讨论】:
-
建议您使用了错误的工具链?检查您的 GCC 版本...
-
@AsteroidsWithWings:答案已更新,见
Additional information from the host -
BeagleBone 上的 Ubuntu 版本是多少?
-
libstdc++.so.6.0.25vsGLIBCXX_3.4.26? -
@AsteroidsWithWings:
Linux beaglebone 4.19.94-ti-r45 #1buster SMP PREEMPT Thu Jun 18 19:18:41 UTC 2020 armv7l GNU/Linux
标签: c++ linux cross-compiling embedded-linux beagleboneblack