Доброго времени суток!
Рассуждали с товарищем на днях о сходствах и различиях библиотек в Linux (use gcc)/Windows (use MSVS).
Основным предметом спора было различие функций LoadLibraryA/W и dlopen, и утверждение, что LoadLibrary, якобы быстрее грузит функции из библиотеки (в отличие от классического метода линковки), потому, что загружает из нее не все функции, а только нужные. Также встал вопрос, зачем под виндами нужен костыль в виде прописывания в .def файле имен используемых функций из библиотеки? Хз, насколько это правда (поверил другу наслово), но он аргументировал создание такого списка тем, что так проще всего сказать компилятору, какие функции можно будет экспортировать из библиотеки. С другой стороны, в никсах достаточно добавить слово extern к функции, чтобы сделать ее видимой из библиотеки и никакие списки не нужны...
P.S. Вероятно, здесь написано много бреда, посему прошу расставить все по полочкам человеку, наглухо забывшему винду и другому человеку, не знающему совсем никсов.
Если кратко, то список вопросов таков:
1) В чем отличие функций LoadLibrary+GetProcAddress от аналогичной dlopen+dlsym, кроме названия?
2) Как они загружают функции из библиотеки - действительно ли только необходимые функции, в чем я сильно сомневаюсь, или же сначала подгружают целиком файл библиотеки в память, а только потом ищут нужные функции?
3) .def-файлы под MSVS - это что за костыль и почему не понравился мелкомягким способ через extern?