В Windows многие .dll поставляются со статическим аналогом .lib. Насколько я понимаю, аналог .lib в основном содержит вызовы LoadProcAddress, так что программисту не нужно делать это самому. По сути, экономия времени. Когда я переключился на Linux, я предполагал, что ситуация будет такой же, заменив .dll на .so и .lib на .a, но я пришел к ситуации, которая показывает мне, что это неправильно, и я не могу понять, что продолжается:
Я использую библиотеку, которая поставляется в виде пары .a/.so. Я связывался с .a, но когда я выполнял ldd для полученного двоичного файла, он не содержал ссылки на соответствующий файл .so. Итак, я попытался связать файл .so, и, к моему удивлению, это сработало. Кроме того, файл .so появился, когда я выполнил ldd для полученного двоичного файла.
Итак, я действительно смущен тем, что происходит. В Windows я бы никогда не подумал связать файл .dll. Кроме того, в Windows, если файл .dll сопровождался .lib, и я связывался с .lib во время компиляции, то я ожидал бы иметь зависимость от соответствующей .dll во время выполнения. Обе эти вещи неверны в данном случае.
Да, я читал базовые руководства по общим объектам в Linux, но все, что я читал, указывает на то, что мое первоначальное предположение было правильным. Кстати, я должен упомянуть, что я использую Code::Blocks в качестве IDE, что, как я знаю, все усложняет, но я на 99% уверен, что когда я говорю ему связать файл .so, это не просто замена файл .a, потому что результирующий двоичный файл меньше. (Плюс весь этот бизнес с ldd...)
В любом случае, спасибо заранее.