Статическое связывание .dll и создателя cmake/qt?

Я использую пакет armadillo для линейной алгебры с C++, для правильной работы которого требуется пара lapack и blas .dll. Я не совсем уверен, что понимаю, что такое статическое связывание. Можно ли как-то поместить эти .dll «внутри» .exe, чтобы мне не нужно было копировать их в каталог сборки? Если да, то как мне настроить это в создателе cmake/qt?


person Patrick Rinker    schedule 05.08.2013    source источник


Ответы (1)


Нет, вы не можете связать библиотеки DLL статически. Вы должны собрать библиотеки как статические библиотеки и связать их. Как это сделать, зависит от библиотек. Если они используют автоинструменты, вам нужно пройти

--enable-static --disable-shared

до configure. Для всего остального вам нужно обратиться к документации.

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