Я использую пакет armadillo для линейной алгебры с C++, для правильной работы которого требуется пара lapack и blas .dll. Я не совсем уверен, что понимаю, что такое статическое связывание. Можно ли как-то поместить эти .dll «внутри» .exe, чтобы мне не нужно было копировать их в каталог сборки? Если да, то как мне настроить это в создателе cmake/qt?
Статическое связывание .dll и создателя cmake/qt?
Ответы (1)
Нет, вы не можете связать библиотеки DLL статически. Вы должны собрать библиотеки как статические библиотеки и связать их. Как это сделать, зависит от библиотек. Если они используют автоинструменты, вам нужно пройти
--enable-static --disable-shared
до configure
. Для всего остального вам нужно обратиться к документации.
person
rubenvb
schedule
05.08.2013
Извините, если это глупый вопрос/комментарий, но у меня уже есть .dll. Вы хотите сказать, что мне нужно загрузить исходный код для lapack/blas и скомпилировать его вручную?
- person Patrick Rinker; 05.08.2013
@ Патрик Боюсь, что да. Если только вы не найдете где-нибудь нужный компилятор/бинарный файл. Как вы думаете, зачем вам нужны статические библиотеки? Нет ничего плохого в перемещении DLL вместе с исполняемым файлом. На самом деле это гораздо предпочтительнее статической ссылки.
- person rubenvb; 05.08.2013
Хорошо, спасибо за помощь. Я не зациклен на статических библиотеках или чем-то еще, просто это кажется немного проще, чем беспокоиться о том, находятся ли .dll в правильной папке. Из любопытства, почему это предпочтительнее статической ссылки?
- person Patrick Rinker; 05.08.2013
Я бы не сказал, что динамическая компоновка де-факто предпочтительнее статической. Есть много сценариев, когда один лучше другого и наоборот. @Patrick, если вы хотите статическую ссылку, вам понадобятся статические файлы .lib для соответствующих проектов, и они должны иметь одинаковую связь во время выполнения, иначе вы столкнетесь с проблемами.
- person syplex; 05.08.2013
@syplex: файлы .lib или .a. Qt поставляется с MinGW GCC.
- person rubenvb; 05.08.2013
@rubenvb, ОП говорит о DLL и EXE, поэтому подходит .lib. Я вижу, вы говорите о mingw gcc, извините, я пропустил это. Хотя есть вероятность, что он не использует mingw.
- person syplex; 05.08.2013
если вы уже скомпилировали dll, то вы можете сохранить
*.exe
и *.dll
в одной папке, и все будет выполняться без проблем.
- person masad; 05.08.2013
@syplex У меня тоже есть файлы .lib. Как мне сделать статическую ссылку с ними? Я пытался возиться с cmake, чтобы он автоматически копировал .dll в исходный каталог, и это сводит меня с ума. Кроме того, я использую mingw.
- person Patrick Rinker; 05.08.2013
.lib используются Visual Studio, файлы .a используются для mingw. Я считаю, что есть способы сделать это, но я не делал этого сам. Попробуйте поискать. mingw.5.n7.nabble.com/ использование-VC-lib-with-mingw-td19148.html может помочь.
- person syplex; 05.08.2013
Еще раз спасибо всем за вашу помощь. :)
- person Patrick Rinker; 05.08.2013