c++ - Beagle bone交叉编译动态链接困惑

标签 c++ linux linker beagleboneblack linaro

我不是来这里要求解决错误或问题的,而只是想从那些更有经验的人那里了解一些事情。

我买了一个 BeagleBone Black(安装了 Debian)。我正在使用 gcc-linaro 和 yagarto 工具附带的 make 实用程序在 Windows 上为它交叉编译 C++。

在使用 C 编译器开发 C 代码时,所有工作和执行都很好。

使用 C++ 但是,当我构建一个可执行文件并将其传输到骨骼(通过 WinSCP)时,我在执行时遇到以下链接器错误:

"./leds1:/usr/lib/arm-linux-gnueabihf/libstdc++.so.6: 找不到版本`GLIBCXX_3.4.21'(./leds1 要求)"/p>

我并不是要准确地解决这个问题。

是不是说在宿主机上构建的时候,宿主机上定义的库路径和骨骼上定义的库路径不一样?

但是,如果我在我的 makefile 中的链接器命令中添加“-static”以在编译时在主机上静态链接库,则代码将在骨骼上执行,但不确定这是否是其他问题的原因我有。

在这种情况下可以静态链接库吗?我想知道在动态链接的情况下,静态链接的库代码是否会不同于它在骨骼上链接到的代码?

当我进行静态链接时,这是否意味着在构建可执行文件时将不再有任何未解析的链接(每个函数都已实现)?例如,我正在调用的 linux system() 函数是否已完全内置到我的可执行文件中?

对不起,很多问题,但都与同一个误解有关。预先感谢您的知识。

最佳答案

该错误的意思只是在设备上未找到动态 libstdc++.so.6。我不知道这样的图书馆是否真的可用。

很可能静态链接是唯一适用于 libstdc++ 的配置。我知道可以静态链接一些库并动态链接其他库,但我对 gcc 或 clang 的了解还不足以告诉您哪些选项可以做到这一点。

如果您使用静态链接并且没有未解析的符号,那么是的,您的二进制文件是完整的。

关于c++ - Beagle bone交叉编译动态链接困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48252788/

相关文章:

c++ - 如何创建可以独立于其依赖项使用的 C++ 库?

linker - msvc 上缺少用于标准库函数调用的 lib 文件

c++ - Visual Studio 中的模板化函数指针数组

c++ - 存在循环依赖时 #include 的正确方法?

c++ - 如何在给定范围内找到 std::set< pair<int, int>> 中的最大值?

c - 从信号处理程序终止子进程

linux - 需要身份验证时如何下载网页目录?

ruby-on-rails - 创建新的 Rails 应用程序时加载错误

c - 让链接器为 avr/gcc 删除未使用的目标文件

c++ - cocos2dx。如何在动画序列之后设置回调(传递参数)