Почему компилятор Intel производит вывод, который требует libiomp5mt.dll, даже если я запрашиваю статическое связывание? - PullRequest
2 голосов
/ 01 сентября 2011

Я компилирую проект openmp с ключом / MT (или, что то же самое, в настройках Visual Studio, «C ++: Генерация кода: Библиотека времени выполнения: Многопоточная».

Однако Visual Studio по-прежнему сообщает, что мой вывод требует libiomp5mt.dll (многопоточность dll), когда я думал, что вышеупомянутая настройка запрашивает статическое связывание.

Есть ли другой вариант, где я пропустил?

В качестве альтернативы, если dll является требованием, я предполагаю, что мне разрешено перераспределять dll Intel вместе с моим собственным приложением?

Ответы [ 3 ]

3 голосов
/ 01 сентября 2011

На веб-сайте Intel написано:

Настоятельно рекомендуется динамически ссылаться в совместимой библиотеке OpenMP * исполняемой библиотеки libiomp (т.е. libiomp5md.lib и libiomp5md.dll, расположенной в [Compiler Dir] \ lib), даже если другие библиотеки связаны статически.Ссылка на статическую библиотеку времени выполнения OpenMP * (например, libiomp5mt.lib) не рекомендуется.Поскольку несколько библиотек OpenMP в одном приложении вызывают проблемы с производительностью (слишком много потоков) и могут вызвать проблемы с корректностью, если инициализировано более одной копии.

Поэтому, хотя вы можете настроить OpenMP для статической ссылки, и эта конфигурацияне зависит от времени выполнения C. Рекомендуется не делать этого.

Лицензия Intel OpenMP позволяет, насколько я могу судить, распространять бесплатно.Вы должны проверить лицензию, прилагаемую к OpenMP, чтобы быть в безопасности.

3 голосов
/ 01 сентября 2011

Вышеуказанный ключ предназначен только для среды выполнения C ++, OpenMP - это внешняя библиотека, которая не является частью среды выполнения C ++. Следовательно, переключатель не оказывает на него никакого влияния.

Что касается перераспределения DLL, посмотрите на лицензию продукта, с которым поставлялась DLL. Возможно, вам разрешено распространять его.

1 голос
/ 01 сентября 2011

Существует два способа создания библиотек кода. Как статические библиотеки и как библиотеки DLL (расширения: * .lib и * dll).

Если доступен только Dll, вы можете ссылаться на него только динамически, а не статически. Что может сбить вас с толку, так это то, что Dll обычно имеет файл lib, на который вы ссылаетесь, который имеет все точки входа в Dll.

...