对于使用std功能的程序,我何时需要关心C中的静态链接与动态链接?

我的所有程序在C语言中往往都是相当原始的控制台应用程序。例如,我可能编写一些代码来解析文件头,然后将一些数据从头打印到屏幕上。为此,我只使用stdio.h stdlib.hstring.hstdbool.h中的函数/符号,例如printf()fopen(),{{ 1}},等等...通常,我不敢在main.c文件以及几个.h文件和.c文件中编写代码。当需要编译时,我将执行以下操作:fread()

该程序运行良好,并且我与同事仅共享源代码,或者如果它们在同一操作系统上,则共享二进制文件,他们通常可以像我一样构建代码并运行它,或直接运行二进制文件。如果我的同事使用的是其他操作系统,那么他/她将仅在该计算机上构建源,或者我将在他们拥有该操作系统的计算机上为他们构建源。

实际上,我从来没有真正考虑过我的依赖项是如何链接的。这可能是因为我主要编写内部工具,并且没有发布给大批读者。话虽这么说,在哪种情况下上述方法不能在系统上运行?当我仅使用std C功能时,是否有可能安装了相同版本的gcc的人无法仅运行我的可执行文件或自己构建代码,然后运行它?实际上,我已经从Linux盒中获取了相同的C代码,将其复制/粘贴到Visual Studio中并使用MSVC进行了编译,并且它仍然可以与标准函数一起正常工作。因此,即使是交叉编译器,我也可以不需要考虑链接。

winniezrk 回答:对于使用std功能的程序,我何时需要关心C中的静态链接与动态链接?

对于Linux / Linux兼容性:

通常,只要您移至具有相同/更好的glibc(以及您使用的其他库)的计算机,就不会遇到问题。 glibc(C标准库/运行时)非常擅长向后兼容。它通常可以跨发行版工作。在大多数情况下,您可以将二进制文件带到具有较低版本库的计算机上,并且可以正常运行(次要版本仅修复了错误,因此,除非您的代码触发了错误,否则它应该可以工作)。

对于Linux / Windows兼容性:在大多数情况下,由于库的运行时和可执行文件格式不同,您将需要重新编译。免责声明:我不是这个主题的专家。

本文链接:https://www.f2er.com/3044020.html

大家都在问