【发布时间】: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