我有一个C程序,它从不同的文件调用几个函数,在编译中我将所有目标文件链接在一起以生成二进制文件。然后我开始执行该程序。现在我想编辑各种文件的来源并编译新版本。这将覆盖旧对象和二进制文件。
这样做会影响当前程序的执行吗?它现在会链接新的目标文件吗?如果我覆盖正在运行的二进制文件,这会导致执行停止,还是以其他方式影响它?或者代码存储在执行开始时无法覆盖的地方?
我正在使用gcc来编译我的代码。
答案 0 :(得分:3)
在Unix上,让gcc
替换可执行文件对正在运行的程序没有影响。
它的工作方式是,只要程序正在运行,旧的可执行文件将保留在磁盘上,以便操作系统可以根据需要引用它。将不再有指向旧可执行文件的目录条目,并且当程序的旧实例停止时将回收磁盘空间。