Если я хочу использовать какую-то другую библиотеку, что мне нужно из библиотеки? Заголовочные файлы .h и ..?
Вам нужен заголовок .h или .hpp для C, C ++, хотя некоторые языки не требуют заголовочных файлов. Вам также понадобятся файлы .a, .so, .dll, .lib, .jar и т. Д. Эти файлы содержат машинный код, который компоновщик может связать с вашей программой. Само собой разумеется, что формат библиотеки должен понимать ваш компоновщик.
В чем разница между .dll и .dll.a.? .dll и .lib? .dll и .exe? Что такое .def?
dll и .a - это библиотечные файлы, которые содержат компоненты кода, которые вы можете связать в своей собственной программе. .exe - это ваша последняя программа, с которой уже связаны файлы .a или .dll.
Имеет ли значение, как была скомпилирована библиотека? Я имею в виду, возможно ли использовать в Windows библиотеку C ++, скомпилированную VC из моего кода C, скомпилированного MinGW?
Да, важно, чтобы используемая библиотека была совместима с вашей платформой. Обычно библиотеки Unix не работают в Windows, и наоборот, если вы используете JAVA, вам лучше, поскольку файлы .jar обычно работают на любой платформе с включенной JAVA (хотя версии имеют значение)
Какой другой способ выбрать для использования другой библиотеки? LoadLibrary () или #include <>?
include - это не способ использовать библиотеку, это просто директива препроцессора, сообщающая препроцессору о включении внешнего исходного файла в ваш текущий исходный файл. Этот файл может быть любым файлом, а не только .h, хотя обычно это будет .h или .hpp
Вам будет лучше, если я оставлю решение о том, когда загружать библиотеку в среду выполнения или в ваш компоновщик, если вы точно не знаете, что загрузка библиотеки в определенный момент времени добавит некоторую ценность вашему коду. Стоимость производительности и точный способ сделать это зависят от платформы.
Есть некоторые библиотеки, которые предоставляют только исходный код или .dll - как использовать такие библиотеки? Нужно ли перекомпилировать их каждый раз, когда я перестраиваю свой проект?
Если у вас есть исходный код, вам нужно будет перекомпилировать его каждый раз, когда вы вносите в него изменения.
однако если вы в любом случае не изменили исходный код библиотеки, нет необходимости перекомпилировать его. Инструмент сборки, такой как Make, достаточно умен, чтобы принять это решение.
Как мне создать один большой .exe? Это называется "статическое связывание"?
Создание статического .exe зависит от используемого вами инструмента сборки.
с gcc это обычно означает, что у вас есть опция -static
gcc -static -o my.exe my.c
Как включить какой-нибудь случайный файл в .exe? Скажите значок программы или стартовую песню?
Ничто в программировании не является случайным. Если бы это было так, у нас были бы проблемы. Опять же, способ воспроизведения песни или отображения значка зависит от платформы, которую вы используете на некоторых платформах, это может быть даже невозможно.
Как мне разбить мой огромный .c на более мелкие? Нужно ли создавать для каждой части файл заголовка, который затем включается в часть с помощью WinMain () или main ()?
Вам понадобится заголовочный файл со всеми вашими прототипами функций, и вы можете разбить вашу программу на несколько файлов .c, которые содержат одну или несколько функций. Ваши основные файлы будут включать заголовочный файл. Все исходные файлы должны быть скомпилированы индивидуально, а затем связаны в один исполняемый файл. Обычно вы получаете .o для каждого .c, а затем связываете все .o вместе, чтобы получить .exe
Если есть библиотека, которая нуждается в другой библиотеке, возможно ли объединить эти две в один файл? Скажем, python26.dll требует msvcr90.dll и Microsoft.VC90.CRT.manifest
Да, для одной библиотеки может потребоваться другая библиотека, однако не рекомендуется объединять разные библиотеки вместе, возможно, вы нарушаете ПИС, а также то, что каждая библиотека обычно представляет собой единое целое с определенной целью и объединяет их в одну не имеет особого смысла.
Что произойдет, если я не освободлю ранее выделенную память? Это будет очищено, если программа (процесс) умирает?
Опять же, зависит от платформы, обычно на большинстве ОС память восстанавливается после смерти программы, но на некоторых платформах, таких как встроенная система, она может быть потеряна навсегда.
Это всегда хорошая идея, чтобы очистить ресурсы, которые использовала ваша программа.