Нет никаких негативных последствий, за исключением того, что ваш исполняемый файл может быть излишне большим. Линкером может быть, возможно, мертвый полоса неиспользуемого кода для вас, и это сократит все. Вы можете использовать какой-либо инструмент для просмотра объектов (otool
, objdump
, nm
и т. Д.) На выходном исполняемом файле, чтобы узнать, есть ли в нем дополнительные символы.
Я использую Mac, так что будут какие-то различия, если вы используете стандартный набор инструментов GCC, но вот пример:
$ make
gcc -o app main.c file2.c
gcc -Wl,-dead_strip -o app_strip main.c file2.c
$ ls -l app*
-rwxr-xr-x 1 carl staff 8744 Feb 6 20:05 app
-rwxr-xr-x 1 carl staff 8704 Feb 6 20:05 app_strip
Я думаю, что в неяблока Gcc мире , вы бы передали -Wl,--gc-sections
вместо -Wl,-dead_strip
в моем примере. Размер разница в двух исполняемых файлах вы можете увидеть это из-за дополнительную функцию раздевания:
$ nm app | cut -c 20- > app.txt
$ nm app_strip | cut -c 20- > app_strip.txt
$ diff app.txt app_strip.txt
8d7
< _function2
Вы можете попробовать установить ссылку с дополнительной библиотекой и без нее и посмотреть, имеет ли исполняемый файл одинаковый размер. –
Я не знаю о GCC, но MSVC будет включать в себя содержимое всех файлов .obj, ссылаетесь ли вы на них или нет, но он будет содержать только те части файлов .lib, которые вы ссылаетесь. Я ожидал бы, что GCC будет таким же –
. Описанный шаг обычно называется «привязкой». Термин «компиляция» обычно используется для описания создания объектных файлов. – MSalters