c++ - 从静态库中剥离所有符号是否会阻止链接?
问题描述
据我所知,链接器的工作是将目标文件中未定义的符号与静态库中定义的符号进行匹配。如果找到,正确的符号定义将包含在最终的可执行文件中。这就是所谓的符号解析。
那么,如果所有符号都从静态库中剥离,会发生什么?它是否会阻止链接器正确解析符号?
解决方案
剥离符号是一种通常用于删除符号调试信息的操作,而不是实际链接过程所需的符号(尽管它可用于删除您不希望在链接过程中使用的符号,例如,您没有生成目标文件)。
如果它使库或目标文件对链接无用,那么该工具的使用将是相当糟糕的。
不要误会我的意思,例如,您实际上可以strip --strip-all
这样做,这不是明智的做法。例如,考虑文件prog1.c
和prog2.c
:
// prog1.c
int fn(void);
int main(void) { return fn(); }
// prog2.c
int fn(void) { return 42; }
对这些文件运行以下命令:
gcc -o prog1.o -c prog1.c
gcc -o prog2.o -c prog2.c
strip --strip-all prog2.o
gcc -o prog prog1.o prog2.o
将导致链接器错误,因为它无法找到fn()
- 它已从prog2.o
. 但是,执行除 之外的相同命令strip
就可以了。
推荐阅读
- arangodb - Arango 数据库复制应用程序不工作
- flutter - 为颤振和飞镖定义一个 linter 规则
- cordova - Ionic 4 - Cordova 插件指纹 AIO - 禁用面部识别(指纹多合一)
- c# - 使用 String.Format("{0:C}",45) 此代码时获取 ₹ 的货币格式
- python - 必须随机生成数字才能在 python 中匹配?
- python - 如何在烧瓶 JSON 响应中显示多个值
- mysql - 在 Cypress 中获取“客户端不支持服务器请求的身份验证协议;考虑升级 MySQL 客户端”
- javascript - 如何动态渲染美人鱼流程图?
- typescript - 使用属性访问器的打字稿不解析接口
- amazon-s3 - 将具有特定标题或具有关键字“日志”的标题的文件从 S3 存储桶复制到另一个存储桶中的文件夹