从不同的目录编译相同的C程序会生成不同大小的目标代码



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

我尝试从对象 1 和 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程序时有哪些依赖关系?

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

我认为这是因为-g。

最新更新