我不是在这里要求解决一个错误或问题,而是为了从那些有更多经验的人那里了解一些东西。
我买了一个BeagleBone Black(安装了Debian)。我在Windows上通过使用gcc-linaro和yagarto工具附带的make实用程序来交叉编译C ++。
使用C编译器开发C代码时,所有工作正常并且执行正常。
使用C ++但是当我构建一个可执行文件并将其传输到骨骼(通过WinSCP)时,我在执行时遇到以下链接器错误:
“./ leds1:/usr/lib/arm-linux-gnueabihf/libstdc++.so.6:找不到版本`GLIBCXX_3.4.21'(./leds1要求)”
我并没有要求完全解决这个问题。
这是否意味着在主机上构建时,主机上定义的库路径与骨骼上的库路径不同?
但是,如果我在makefile中的链接器命令中添加“-static”以在主机上的编译时静态链接库,则代码会在骨骼上执行,但不确定这是否是其他问题的原因我我有。
在这种情况下静态链接库是否可以?我想知道静态链接的库代码是否可以与在动态链接的情况下链接到骨骼的代码不同?
当我进行静态链接时,是否意味着在构建可执行文件时不会有任何未解析的链接(每个函数都已实现)?我正在调用的linux system()函数完全内置于我的可执行文件中吗?
很多问题很抱歉,但所有这些都与误解有关。提前感谢您的知识。
答案 0 :(得分:0)
该错误意味着只是在设备上找不到动态libstdc ++。so.6。这个图书馆是否实际可用是我不知道的。
静态链接可能是唯一适用于libstdc ++的配置。我知道静态链接一些库并动态链接其他库是可能的,但我不知道gcc或clang是否足以告诉你哪些选项会这样做。
如果您是静态链接且没有未解析的符号,那么是,您的二进制文件已完成。