【问题标题】:compilation of same c program from different directory generates object code of different size从不同目录编译相同的 c 程序会生成不同大小的目标代码
【发布时间】:2019-07-24 10:13:06
【问题描述】:

我有一个 c 程序保存在不同的目录“source1/abc.c”和“source2/abc.c”中。我想在“object1/abc.o”和“object2/abc.o”中生成目标代码。 source1 和 source2 目录下的 abc.c 程序都是一样的。但是在编译后 object1 和 object2 的对象(即 abc.o )大小不同。我正在使用相同的标志进行编译。

我尝试从其他目录编译代码,而不是object1和object2,编译后的大小相同。

cc -c source1/abc.c -DLINUX -D_LARGE_THREADS -D_THREAD_SAFE -D_REENTRANT -pthread -D_GNU_SOURCE -g -fPIC -O3  -lpthread  -lm  -lrt  -o object1/abc.o
cc -c source2/abc.c -DLINUX -D_LARGE_THREADS -D_THREAD_SAFE -D_REENTRANT -pthread -D_GNU_SOURCE -g -fPIC -O3  -lpthread  -lm  -lrt  -o object2/abc.o

abc.o 的大小应该相等还是取决于运行它的目录? c程序编译时的依赖关系是什么?

【问题讨论】:

  • 包含的文件是否相同?您可以使用-E 预处理代码并比较输出。您也需要更改 -o ... 选项。
  • OT:_LARGE_THREADS 是什么?我找不到任何参考,所以它似乎是为您的代码创建的东西。那是a reserved identifier per 7.1.3 Reserved identifiers:“所有以下划线和大写字母或另一个下划线开头的标识符始终保留供任何使用。”

标签: c makefile compilation size


【解决方案1】:

您正在使用 -g 选项进行编译,该选项将调试信息添加到目标文件中。这些可能包含源文件的路径信息,因此不同的路径导致不同的符号和不同的总文件大小。

【讨论】:

  • 是的,这是因为 -g 标志。我删除了 -g 标志。现在大小一样了。
【解决方案2】:

我认为这是因为 -g。

【讨论】:

  • 是的,这是因为 -g 标志。我删除了 -g 标志。现在大小一样了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多