В 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, потому что получающийся двоичный файл меньше.(Плюс все дело в лдд ...)
В любом случае, спасибо заранее.