MSVC связывается с динамической библиотекой со статической библиотекой в ​​качестве входных данных компоновщика - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть проект, который ссылается на OpenBLAS.В свойствах проекта в Visual Studio у меня в разделе «Дополнительные зависимости» указан полный путь к openblas.lib, но MSVC по-прежнему создает двоичный файл, который зависит от openblas.dll.

Проект сгенерирован CMake с использованием импортированная цель OpenBLAS OpenBLAS::OpenBLAS, но я думаю, что для целей отладки наиболее интересным является вопрос, почему MSVC не связывает объекты из файла, который предоставляется в качестве входных данных.

1 Ответ

0 голосов
/ 18 февраля 2019

A * .lib в Windows может быть либо библиотекой импорта для DLL, либо статической библиотекой.

Библиотека в CMake создается с атрибутом STATIC или SHARED.Если по умолчанию на платформе Windows значение опущено , создается общая библиотека.Это можно изменить по определению -DBUILD_SHARED_LIBS=OFF в командной строке CMake.

Когда вы разместили CMakeLists.txt из OpenBLAS, вы по умолчанию создаете DLL на платформе Windows.Таким образом, библиотека, на которую вы ссылаетесь, является библиотекой импорта.

TL; DR : Чтобы построить OpenBLAS как статическую библиотеку, вам нужно передать -DBUILD_SHARED_LIBS=OFF в командной строке CMake при запуске configureшаг.

...