我在十六进制编辑器中打开了一个静态库(用 VC++ 编译),我看到了所有代码文件和 header 的路径。我不明白他们在那里服务的目的是什么。
有没有办法不将它们嵌入到二进制文件中?我已经浏览了所有选项(我认为)但找不到任何东西。
最佳答案
是的,编译器在静态库中嵌入了很多上下文信息。请记住,静态库是一个非常弱的代码抽象,它只不过是一堆 .obj 文件。将其视为压缩率很差的 .zip 文件:)
对该信息有非常严格的要求,工具链的其余部分取决于它。与库管理器一样,它需要合并程序数据库。而链接器,它需要能够重新启动编译器的后端,以使用配置文件引导的优化数据重建二进制文件。
这可能如您所见,/GL 编译选项嵌入了编译器使用的命令行。所以 PGO 可以正确完成,使用完全相同的编译选项。还值得注意的是,非常对客户端程序员来说非常方便,他可以对他需要使用的编译选项进行逆向工程,以便能够正确链接您的库。每个人都忘记记录的一个非常重要的细节:)
请注意,您不能合理删除此信息,PGO 很重要。如果您不喜欢这种信息泄露,请使用构建服务器或发送二进制文件而不是库。动态链接库。
关于c++ - 在静态库中硬编码的代码文件和头文件路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26439358/