c++ - 在静态库中硬编码的代码文件和头文件路径?

标签 c++ static-libraries filepath

我在十六进制编辑器中打开了一个静态库(用 VC++ 编译),我看到了所有代码文件和 header 的路径。我不明白他们在那里服务的目的是什么。
有没有办法将它们嵌入到二进制文件中?我已经浏览了所有选项(我认为)但找不到任何东西。

最佳答案

是的,编译器在静态库中嵌入了很多上下文信息。请记住,静态库是一个非常弱的代码抽象,它只不过是一堆 .obj 文件。将其视为压缩率很差的 .zip 文件:)

对该信息有非常严格的要求,工具链的其余部分取决于它。与库管理器一样,它需要合并程序数据库。而链接器,它需要能够重新启动编译器的后端,以使用配置文件引导的优化数据重建二进制文件。

可能如您所见,/GL 编译选项嵌入了编译器使用的命令行。所以 PGO 可以正确完成,使用完全相同的编译选项。还值得注意的是,非常对客户端程序员来说非常方便,他可以对他需要使用的编译选项进行逆向工程,以便能够正确链接您的库。每个人都忘记记录的一个非常重要的细节:)

请注意,您不能合理删除此信息,PGO 很重要。如果您不喜欢这种信息泄露,请使用构建服务器或发送二进制文件而不是库。动态链接库。

关于c++ - 在静态库中硬编码的代码文件和头文件路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26439358/

相关文章:

c++ - 用它的大小缩放滚动球控件

C++ 从文件中读取矩阵类型输入

linux - 编译库后删除源代码目录

android - 在真实 Android 设备上测试应用程序时 URI 无效,但在模拟器上测试时有效

html - 如何链接到子文件夹中的样式表

c++ - OpenCV:如何使用阈值正确分割图像/使用二进制图像分割原始图像?

c++ #include(什么函数在什么里面)

c++ - 可执行文件、静态库和共享库之间的关系

c - 如何向 ffmpeg 库添加新过滤器

r - 如何从R中的basename结尾删除文件扩展名?