Код: Выделить всё
(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)
Учитывая, что (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
Мобильная версия