我有一个程序和一个子程序。我使用以下语句编译我的程序:
cobc -x -free -Wall program.cob
我的问题在于我的子程序。我使用以下语句来编译它:
cobc -c -free -Wall mysubprogram.cob
当我使用-c标志时,它会编译,但代码没有更新。当我在代码中更改一个值时,它会编译,但是当我运行程序时,这个更改不会反映出来。
但是,如果我将标志从-c更改为-m,如下所示:
cobc -m -free -Wall mysubprogram.cob
这将解决问题,我在运行代码时也会对代码所做的更改
有人可以帮我理解为什么会这样吗?
答案 0 :(得分:1)
根据man
页面,-c
标记表示:
编译和汇编,但不要链接。 (几乎与编译C或C ++时的工作方式相同)。
这意味着不构建可执行文件(您只需获取一个目标文件),因此根本不会有可执行文件(如果这是第一次),或者它将是之前成功的文件非-c
版本(因此您的“但代码未获得更新”评论)。
-m
选项构建一个可动态加载的模块,适合链接。链接是动态的这一事实意味着模块的更新会立即反映在可执行文件中(假设它已经构建完成)。有关其工作原理的详细信息,请参阅here。
-x
选项会构建一个正确的可执行文件,因此会自动包含您的更新。