Я немного смущен тем, что я узнал сегодня. Я надеюсь, что кто-нибудь может мне помочь.
Я понимаю концепцию динамического и статического связывания, но проблема заключается в следующем. В Windows или, по крайней мере, в парадигме Windows вы можете иметь .lib (который похож на .a) и .dll (который похож на .so, за исключением ... другого), и вы должны статически связываться в .lib, который содержит код, который вызывает функции из библиотеки DLL во время выполнения. Это правильно? Другими словами, gcc или g ++ должны иметь файлы .lib, доступные во время компиляции / компоновки, и иметь возможность находить файлы .dll во время выполнения. Пожалуйста, исправьте все неправильные предположения здесь.
Однако я делю несколько своих исходных файлов в своем небольшом приложении, потому что хочу сделать их библиотекой. Когда я запускаю g ++ на моих объектных файлах с опцией -shared, это в основном создает общую библиотеку (.so)? Вот где возникает путаница. Файл такой же , что требуется и во время соединения и во время выполнения? У меня проблемы с пониманием того, как мне это нужно в параметре -L / -l во время соединения, но ему все еще нужен файл во время выполнения. Это на самом деле норма? Dll принципиально отличается?
Наконец, последний вопрос. Возьмите библиотеку вроде boost на Windows. Я построил надстройку в соответствии с инструкциями. В конце каталог stage / lib содержит библиотеки в повторяющейся последовательности name.a, name.dll.a, name.dll. Какова цель этой схемы? Я знаю, что мне нужны dll-файлы во время выполнения, но когда я использую опцию -L / -l во время компоновки, какие файлы используются при THEN?
Извините, если это действительно рассеяно, но я надеюсь, что кто-то может помочь прояснить это. Большое спасибо!