gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 12:40:09 29 4
gpt4 key购买 nike

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

我买了一个 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com