问题描述
我正在尝试为树莓派进行交叉编译,不幸的是,该pi的libstdc ++版本比我的构建机器还旧,当我尝试运行可执行文件时,它说“ ./
获得ld和lld告诉我尝试链接时使用的路径的奖励点。
解决方法
我希望能够告诉ld(gcc链接器)和lld(clang链接器)“仅在这些路径中查找任何库”
如果您提供足够的内容-L/path/to/target/libraries
,那么两者都会做到。
它一直在寻找系统之一并与之链接。我已经将树莓派的/ usr / lib和/ lib导演同步到主机上,我只想说“仅使用/ path_to_raspberry_pi_rsync / lib和/ path_to_raspberry_pi_rsync / usr / lib”。
您的问题很可能源于您rsync
所拥有的是运行时库,而不是实际的开发库。所以如果/path_to_raspberry_pi_rsync/usr/lib
包含libstdc++.so.6
,但不包含libstdc++.so
符号链接,则链接器将继续寻找libstdc++.so.
,直到在链接器中找到一个。系统目录。
在添加中,一旦成功将链接限制为仅“ rsync”库,链接可能会因未解析的libstdc++
符号而失败。那是因为您需要一组 matching 标头和库。
您最好的选择是获取针对您的运行时环境的 proper 工具链。
获得ld和lld告诉我尝试链接时使用的路径的奖励点。
使用ld
,您可以添加-Wl,-t
标志,它将告诉您打开的每个库和目标文件。 lld
也可以支持此标志。