[Logo] LUA Форум
  [Search] Search   [Recent Topics] Recent Topics   [Hottest Topics] Hottest Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
Компиляция, компиляторы, результат и Бенисио Дель Торо  XML
Forum Index » LUA: Общие вопросы
Author Message
lexa
Новичок
[Avatar]

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 и тоже хороший, но с тонкостями винды знаком мало поэтому компилирует, эм, "универсально" (или какое-то иное слово, подходящее сюда лучше).

Признанный мастер чинпоко, а-ай ^_^
[WWW]
al
ГУРУ
[Avatar]

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 к полученным файлам, это удалит отладочную информацию из сборки и немного уменьшит размер файлов.
[Email] [ICQ]
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

lexa
Новичок
[Avatar]

Joined: 09/02/2010 15:48:09
Messages: 18
Offline

al, z00n, большое спасибо за разъяснения. Я долго переваривал, но в итоге понял. Всё оказалось чуть проще, чем ожидал, и гораздо сложнее, чем хотелось бы. :)

P.S. С msvcr*.dll, к сожалению, сталкивался, только не знал для чего это библиотека. Я пытался силить wxWidgets средствами питона (дурной язык, имхо). Для чего сделал программку, прикрепил ридми с текстом "Если будут проблемы пишите на ..." и выложил в интернет. В течение недели пришлось кучу почты разбирать. Потом рядом с программой клал msvcr7.1.dll.

Но, новое это всегда интересно.

Признанный мастер чинпоко, а-ай ^_^
[WWW]
 
Forum Index » LUA: Общие вопросы
Go to:   
Powered by JForum 2.1.9 © JForum Team