March 29, 2024, 09:15
bigger smaller reset     1020px Wide width Full width Reset   * *

Gildor's Forums

  Homepage Facebook Read news on Twitter Youtube channel Github page
Welcome, Guest. Please login or register.
Did you miss your activation email?

« previous next »
Print
Author Topic: Статическая линковка в Unreal Engine 3 и не только  (Read 3529 times)
Skykila
Global Moderator
Sr. Member
*****
Posts: 266



View Profile
« on: August 17, 2010, 14:24 »

Недавно задумался я над таким вопросом. На кой чёрт все современные игры, да и не только, линкуются статически? Ведь ни из-за проблем с потерей dll в дистрибутиве? Тем более что та том-же xbox 360 такое в принципе не возможно.
А ведь еще совсем недавно всё линковали динамически.
Посмотрел в google, а там во-первых мнений кот наплакал, нарыдал, да то по всякой мелочи, а во-вторых, единого мнения нет, то есть, кто в лес, кто по дрова. Да и честно сказать, мне сугубо наплевать на то как лучше скомпилировать Qt под линукс.
Вот поэтому я и хотел спросить, не знает ли кто в чём причина повального перехода на статическую линковку. Возможно, так приложение получается быстрее?
Logged

I have the simplest tastes. I am always satisfied with the best.
Oscar Wilde
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #1 on: August 17, 2010, 18:33 »

Первыми статически слинковали Doom 3 - вкомпилили в игру редактор.

Я могу назвать несколько причин:
  • динамическая линковка - значит будут экспорты/импорты dll - а такие вещи проще дизассемблировать, то есть статическая линковка менее подвержена анализу из-за полного отсутствия отладочной информации (UT2004 дизассемблировать на несколько порядков легче, чем UT3 - я в UT3 сначала вообще не ориентировался - сплошной код без названий функций)
  • статически слинкованный файл меньше (иногда - раза в 2) чем динамический (вместе с dll-ками) - так как отсутствуют секции импорта/экспорта и плюс линковщик может выкинуть библиотечный код, который не используется (но при этом присутствовал бы в dll)
  • вы никогда не сталкивались с проблемой - когда 2 dll хотят использовать друг друга (как правило, если плохо продумана архитектура системы) ? они никак не собираются, но вот статически слинковать легко. У нас в Adamant Multimedia с "Исходом с Земли" была такая проблема, решали её совершенно некрасиво - сделали dll, которая содержала указатели на все подсистемы и как-то там все вызовы делались не напрямую, а через неё.

Минус статической линковки - сама линковка делается намного дольше и требует компьютер с бОльшим объёмом памяти.
Logged
Skykila
Global Moderator
Sr. Member
*****
Posts: 266



View Profile
« Reply #2 on: August 17, 2010, 20:40 »

То есть, если я правильно понимаю, то лучше всего в конце сликовать статически, когда разработка движка завершена, такая суперфинишная операция?
Logged

I have the simplest tastes. I am always satisfied with the best.
Oscar Wilde
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #3 on: August 17, 2010, 23:37 »

Если есть возможность делать динамическую линковку - то да.
Logged
Skykila
Global Moderator
Sr. Member
*****
Posts: 266



View Profile
« Reply #4 on: August 18, 2010, 09:35 »

Большое спасибо Cheesy!!!
Logged

I have the simplest tastes. I am always satisfied with the best.
Oscar Wilde
Print 
« previous next »
Jump to:  

Powered by SMF | SMF © 2006-2009, Simple Machines LLC
Leviathan design by Bloc | XHTML | CSS