Здрасьте! Есть проект в VS2005, в проекте, допустим, 10 модулей, в одном из модулей есть функция func(), нужно сделать так, чтобы она была самой последней в выходном файле. Сейчас просто задаю порядок следования функций с помощью опции /ORDER, но с ростом проекта уже задолбался каждую функцию добавлять в этот список. (приходится утилитой DUMPBIN /symbols *.obj вытаскивать все имена и последней ставить func()) Подскажите плиз как сделать сабж...
Так всё так. Только Pre-Link Step добавить, чтобы перед линковкой все нужные действия сами выполнялись. Если один кинет сюда минимальный проект для сборки с, допустим, двумя модулями и функциями в каждом, мы даже сгенерируем батник.
А чтобы батник потестить и косяки убрать – а свой проект создавать неохота, ага. Ну да ладно, вот однолинейник: Код (Text): @del order.txt & (@for %f in (*.obj) do @for /f "tokens=8" %i in ('dumpbin /symbols %f ^| findstr /R "\ notype\ () "') do @(@set func=%i & @if !func:~0^,1!==_ ( @echo !func:~1!>>order.txt ) else ( @echo %i>>order.txt ))) & @echo func>>order.txt К сожалению, оказалось, что это отвратный способ. Во-первых, не все функции захватывает, во-вторых, тормозит, в-третьих, выглядит отвратительно (даже если юзать ключи /ignore:4097 и /ignore:4037). Вместо этого вот ультимативный, великолепный способ: Код (Text): #pragma code_seg(push, ".text$zzz") void func() { ... } #pragma code_seg(pop) Линкер соберёт все секции ".text$***" в секцию ".text", причём расположит их в алфавитном порядке. (Валидно; Используется в CRT).
Sol_Ksacap Отлично! Большой сэнкс! А я извращался так: создавал отдельный .obj с одной функцией (кот. должна была идти последней), но линкер все равно пихал ее в середину экзешника... Тоже самое с именами: даже если я давал имя вместо func() zzzzzzzzzzzz() линкер также пихал в середину... А твой способ работает на ура Тема закрыта.