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

Shi*_*aha 4 c size makefile compilation

我的交流程序保存在不同的目录“ source1 / abc.c”和“ source2 / abc.c”中。我想在“ object1 / abc.o”和“ object2 / abc.o”中生成目标代码。source1和source2目录中的abc.c程序都相同。但是在编译之后,对象1和对象2的两个对象(即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
Run Code Online (Sandbox Code Playgroud)

abc.o的大小应该相等,还是取决于运行它的目录?编译c程序时有哪些依赖性?

小智 5

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