| Author |
Message |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 01/03/2010 18:03:44
|
lexa
Новичок
![[Avatar]](/forum/images/avatar/138bb0696595b338afbab333c555292a.png)
Joined: 09/02/2010 15:48:09
Messages: 18
Offline
|
Привет. У меня снова дурной вопрос. Я бы поискал в яндексо-гугле, но не очень понимаю что искать.
Есть такая буржуйская поговорка: monkey see monkey do. Сейчас это про меня. Так как я слабо понимаю сишный код, да и вообще принципы компиляции и т.д., а просто беру исходники и следую инструкции из ридми. Короче, "следую инструкциям инсталяции" только в коммандной строке. :)
И назрели вопросы. В данном случае на примере исходников Lua, раз форум о ней.
Для Си есть несколько компиляторов, как я понял. Обычно использую компиляторы из набора MinGW для постройки программ. У Lua есть luavs.bat, который позволяет компилировать через Visual Studio (я даже скачал её для этого дела, та ещё дура; Express версию не выбрал, т.к. хочу поковырять Windows Mobile SDK).
Вопросы.
1. В чём разница между GCC, BCC (компилятор "Борланда", вроде), cl (компилятора VS?) и прочими?
2. make mingw создаёт три файла: lua.exe, luac.exe и lua*.dll. А VS ещё какие-то lua*.exp и lua*.lib. Чё это такое?
3. Разный размер у lua*.dll. GCC создаёт файл в 154 КБ, а VC - 120 КБ, плюс 25 КБ lib-файл и 15 - lib. Чё это такое? luac.exe, кстати, по размеру тоже разные.
Возможно, глупости всякие спрашиваю, но просто знать хочется. Может даже есть чего почитать.
P.S. Предполагаю, чисто логически: компилятор VS хороший компилятор, а меньший размер даёт в силу знаний особенностей платформы, для которой компилирует. GCC порт никсового компилятора... Хотя, не, не так. Это же просто компилятор под x86 и тоже хороший, но с тонкостями винды знаком мало поэтому компилирует, эм, "универсально" (или какое-то иное слово, подходящее сюда лучше).
|
Признанный мастер чинпоко, а-ай ^_^ |
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 01/03/2010 18:34:01
|
al
ГУРУ
![[Avatar]](/forum/images/avatar/1ff1de774005f8da13f42943881c655f.png)
Joined: 04/02/2008 20:12:56
Messages: 140
Location: Poltava, Ukraine
Offline
|
Обычно собирают определенным компилятором чтобы потом использовать Луа в разработке и сборке проектов с этим компилятором.
При сборке с VS библиотеки линковки и заголовки лягут в include и lib Студии, gcc - соответственно в папки с gcc.
Иногда есть отличия в самом подходе создания таких библиотек. Например по умолчанию VS создаст набор .lib файлов, а gcc создаст
только один архив библиотек .a (хотя внутри архива теже .lib). Хотя можно поменять.
Я собираю всегда gcc. Если тебе важен размер то можно применить команду strip из binutils к полученным файлам, это удалит отладочную информацию из сборки и немного уменьшит размер файлов.
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 02/03/2010 02:15:56
|
z00n
Постоянный посетитель
Joined: 15/02/2008 12:15:56
Messages: 96
Offline
|
lexa wrote:
Вопросы.
1. В чём разница между GCC, BCC (компилятор "Борланда", вроде), cl (компилятора VS?) и прочими?
2. make mingw создаёт три файла: lua.exe, luac.exe и lua*.dll. А VS ещё какие-то lua*.exp и lua*.lib. Чё это такое?
3. Разный размер у lua*.dll. GCC создаёт файл в 154 КБ, а VC - 120 КБ, плюс 25 КБ lib-файл и 15 - lib. Чё это такое? luac.exe, кстати, по размеру тоже разные.
1. GCC и MSVC - очень хорошие, современные, оптимизирующие компиляторы. Остальные хуже, но у них могут быть свои фишки, например, tcc в сто раз быстрее компилирует и.т.д.
Под Win главная разница в версии С-шного рантайма (msvcrt.dll, msvcr71.dll, msvcr80.dll, msvcr90.dll). Mingw всегда линкует с msvcrt.dll, которая из коробки есть во всех версиях windows, начиная с самых древних. Студия линкуется с рантаймом соответствующим своей версии: msvs 60 -> msvcrt.dll ... msvs 2005 -> msvcr80.dll и.т.д. Это неудобно, т.к. шестой студией давно никто не пользуется, а быть уверенным в том, что на произвольной машине есть рантайм сташих версий нельзя (поэтому всякие 3DS MAX при инсталяции ставят вам "Microsoft Visual C++ 2005 Redistributable Package (x86)").
Если вы линкуете луа статически к своему приложению - вам все это пофиг.
2. lua*.exp и lua*.lib (не путать со статической либой) дополнительные "заголовочные" файлы для dll. Exp можно просто выкинуть, а lib использовать в командной строке cl.exe, когда нужно прилинковать что-то к dll.
3. По поводу размера dll - тут была старая тема: http://www.lua.ru/forum/posts/list/55.page - вкратце, на производительность это точно не влияет.
> Возможно, глупости всякие спрашиваю, но просто знать хочется. Может даже есть чего почитать.
Если читаете по английски, рекомендую "An Introduction to GCC" by Brian Gough - тонкая(124 стр.) и по делу.
This message was edited 1 time. Last update was at 02/03/2010 02:17:43
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 02/03/2010 11:44:22
|
lexa
Новичок
![[Avatar]](/forum/images/avatar/138bb0696595b338afbab333c555292a.png)
Joined: 09/02/2010 15:48:09
Messages: 18
Offline
|
al, z00n, большое спасибо за разъяснения. Я долго переваривал, но в итоге понял. Всё оказалось чуть проще, чем ожидал, и гораздо сложнее, чем хотелось бы. :)
P.S. С msvcr*.dll, к сожалению, сталкивался, только не знал для чего это библиотека. Я пытался силить wxWidgets средствами питона (дурной язык, имхо). Для чего сделал программку, прикрепил ридми с текстом "Если будут проблемы пишите на ..." и выложил в интернет. В течение недели пришлось кучу почты разбирать. Потом рядом с программой клал msvcr7.1.dll.
Но, новое это всегда интересно.
|
Признанный мастер чинпоко, а-ай ^_^ |
|
|
 |
|
|
|
|