Конкретный ответ: результаты для Solaris 10, RHEL 4:
gcc -funit-at-a-time file.c -o
с объявленным «статическим» func дает результат в нм (отредактировано, пример Solaris):
[39] | 133316| 0|OBJT |LOCL |0 |16 |force_to_data
[37] | 67064| 0|FUNC |LOCL |0 |9 |frame_dummy
[78] | 67208| 36|FUNC |GLOB |0 |9 |main
[44] | 133360| 24|OBJT |LOCL |0 |22 |object.2
gccfile.c -o файл производит:
[39] | 133356| 0|OBJT |LOCL |0 |16 |force_to_data
[37] | 67064| 0|FUNC |LOCL |0 |9 |frame_dummy
[49] | 67208| 32|FUNC |LOCL |0 |9 |func
[79] | 67240| 36|FUNC |GLOB |0 |9 |main
[44] | 133400| 24|OBJT |LOCL |0 |22 |object.2
[46] | 133392| 0|OBJT |LOCL |0 |21 |p.0
И поскольку gcc -O2 включает -funit-at-a-time:
[54] | 133308| 0|OBJT |LOCL |0 |16 |force_to_data
[37] | 67064| 0|FUNC |LOCL |0 |9 |frame_dummy
[78] | 67208| 24|FUNC |GLOB |0 |9 |main
[44] | 133344| 24|OBJT |LOCL |0 |22 |object.2
, так как -O2 имеет другие побочные эффекты,например, сделать отладчик менее надежным, рассмотрите возможность использования
gcc -funit-at-a-time file.c -o file