C++11 如何链接使用g++;(Ubuntu)到用g++;(拉斯宾)?

C++11 如何链接使用g++;(Ubuntu)到用g++;(拉斯宾)?,c++11,docker,g++,linker-errors,raspbian,C++11,Docker,G++,Linker Errors,Raspbian,我有一个库(我们称之为libmylib.so),它是用运行Ubuntu 16的docker构建的。我想在我希望在运行Raspbian的raspberry Pi上编译的程序(我们称之为myapp)中使用这个库 编译时,我会得到以下形式的输出日志: [25%] Building CXX object example1.cpp.o [50%] Building CXX object example2.cpp.o [75%] Building CXX object example3.cpp.o [100

我有一个库(我们称之为libmylib.so),它是用运行Ubuntu 16的docker构建的。我想在我希望在运行Raspbian的raspberry Pi上编译的程序(我们称之为myapp)中使用这个库

编译时,我会得到以下形式的输出日志:

[25%] Building CXX object example1.cpp.o
[50%] Building CXX object example2.cpp.o
[75%] Building CXX object example3.cpp.o
[100%] Linking CXX executable target
然后是一系列形式上的错误:

undefined reference to `VTT for std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >@GLIBCXX_3.4.21'
undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@GLIBCXX_3.4.21'
collect2: error: ld returned 1 exit status
从我的树莓皮

pi@raspberrypi:/usr/bin $ g++ --version
g++ (Raspbian 4.9.2-10+deb8u1) 4.9.2
这是一个彻底的交易破坏者,还是有办法让它发挥作用

编辑:是我读到的内容,使我认为这是编译器版本问题

而且似乎也有类似的错误,修复程序将添加到myapp的cmake中:

这是行不通的

将此标志添加到libmylib.so的编译选项中,可以将未定义引用错误的数量从10减少到1。更准确地说:

undefined reference to `std::invalid_argument::invalid_argument(char const*)@GLIBCXX_3.4.21'

将libmylib编译为静态库而不是共享库以某种方式修复了问题。

1。)从链接器错误中,我发现直接的问题是libstdc++不匹配2。)由于raspberry pi与x86不同,具有不同的指令集,您不应该期望x86中的任何对象代码在rpi上工作,除非它是专门为该ARCH交叉编译的(1)您能详细说明一下吗?谷歌搜索libstdc++6告诉我要安装libstdc++6,但显然我已经有了最新的版本。2) 我为arm架构做了交叉编译。3) 因此,不同的g++版本不应该成为问题?在这两种平台上升级到更现代的gcc版本(例如7.x.y)应该是首选。混合libsdc++版本是不可取的。作为最后手段,您可以尝试将libstdc++.so(当然是arm版本)从PC复制到Pi并与之链接。显然,通过使用库的静态版本,问题消失了。谢谢大家。
add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
undefined reference to `std::invalid_argument::invalid_argument(char const*)@GLIBCXX_3.4.21'