Каков источник разницы в размере статически создаваемых и динамически создаваемых библиотек в библиотеке повышения?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Каков источник разницы в размере статически создаваемых и динамически создаваемых библиотек в библиотеке повышения?

Сообщение Anonymous »

При установке библиотеки boost (частью которой является библиотека Boost Graph) на моем компьютере было установлено следующее:

Код: Выделить всё

(1) C:\local\boost_1_86_0\boost\graph\header files.hpp
(2) C:\local\boost_1_86_0\lib64-msvc-14.3\boost_graph-vc143-mt-x64-1_86.dll (305 kb size)
(3) C:\local\boost_1_86_0\lib64-msvc-14.3\libboost_graph-vc143-mt-x64-1_86.lib (2897 kb size)
(4) C:\local\boost_1_86_0\lib64-msvc-14.3\libboost_graph-vc143-mt-s-x64-1_86.lib (3191 kb size)
Глядя на https://www.boost.org/doc/libs/1_42_0/m ... ary-naming, я делаю вывод, что (3) и (4) являются статическими библиотеками, поскольку у них есть префикс lib, а (2), очевидно, является dll.
Учитывая, что (3) и (4) уже являются статическими библиотеки, зачем (4)? Согласно этой документации, «Ключ» s в имени указывает:

статическую ссылку на стандартную библиотеку C++ и среду выполнения компилятора
поддерживающие библиотеки.

(Q1) В чем разница (3) и (4)? Является ли (3) НЕ связанным статически со стандартной библиотекой C++ и библиотеками поддержки времени выполнения компилятора? Если нет, то как (3) связывается со стандартной библиотекой и библиотеками поддержки среды выполнения?
(Q2) Учитывая размер статических библиотек 2897 КБ и 3191 КБ в отличие от размера dll 305 КБ, означает ли это, что весь код библиотеки графов повышения (и все ее алгоритмы, максимальный поток, кратчайший путь Дейкстры, минимальное связующее дерево и т. д.) полностью содержится в этих файлах как объект файлы? Предположим, я создаю файл приложения .exe на одном компьютере, статически связываясь с (3) или (4), который запускает некоторый алгоритм графа повышения. Могу ли я просто взять исполняемый файл вместе с (3) или (4), скопировать его на новый компьютер, на котором вообще не установлено повышение, и ожидать, что исполняемый файл будет работать нормально? Или, поскольку это статические библиотеки, исполняемый файл уже будет содержать встроенный в него алгоритм библиотеки графов повышения, и поэтому на самом деле исполняемый файл просто нужен и даже не нужен ни (3), ни (4) на новой машине?
(Q3) Можно ли динамически связать (с использованием флага компилятора MSVC /MD) с (3) и (4) и можно ли связать статически (с использованием флага компилятора MSVC /MT) с (2) или следует только статически ссылаться на статическую библиотеку и динамически ссылаться на dll?
(Q4) Если кто-то делает ссылку на (2) [либо с использованием флага /MD и /MT], поскольку связывание было выполнено с dll, нельзя просто взять исполняемый файл и ожидать, что он запустится на другой машине, на которой не установлено это повышение. Это правильно?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ically-bui
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»