Author

Topic: LIBTIFF-5_.DLL не линкуется в статическую сборку под Windows (Read 402 times)

newbie
Activity: 5
Merit: 0
Вопрос решился переустановкой Windows.

Возможно, слишком резкое решение, но моя виндовс давно нуждалась в переустановке Smiley
legendary
Activity: 2618
Merit: 2304
Спасибо за развёрнутый ответ.

Главная проблема в том, что библиотека не должна быть DLL и лежать где-то рядом или в системе.

Все настройки и ключи компилятора, указывают на то, что все необходимые файлы и библиотеки должны быть включены в exe файл.
Таким образом для запуска приложения нужен только один exe - файл.

По не известной мне причине, одна единственная библиотека (LIBTIFF-5_.DLL) не включается в мою программу.

Вопрос: Как исправить? почему так происходит?
Возможно, Вам нужно найти другую версию или сборку требуемой библиотеки.
newbie
Activity: 5
Merit: 0
Спасибо за развёрнутый ответ.

Главная проблема в том, что библиотека не должна быть DLL и лежать где-то рядом или в системе.

Все настройки и ключи компилятора, указывают на то, что все необходимые файлы и библиотеки должны быть включены в exe файл.
Таким образом для запуска приложения нужен только один exe - файл.

По не известной мне причине, одна единственная библиотека (LIBTIFF-5_.DLL) не включается в мою программу.

Вопрос: Как исправить? почему так происходит?
newbie
Activity: 45
Merit: 0
Если я правильно понял, то у вас возникает ошибка при запуске собранного проекта на другой машине. Ошибка заключается в том, что не может найти DLL.

DLL - это динамическая библиотека, она подгружается во время загрузки приложения. Если быть точным, то есть два вида: динамическое связывание во время загрузки и динамическое связывание во время выполнения.

1. Динамическое связывание во время загрузки. В динамической компоновке во время загрузки, приложение делает явный вызов экспортированных функций DLL как локальных функций. Во время компоновки вы указываете необходимые заголовочные файлы (расширение h и файлы импорта lib)
2. Динамическое во время выполнения. Во время выполнения, приложение вызывает функции LoadLibrary или функцию LoadLibraryEx для загрузки библиотеки DLL во время выполнения. После успешной загрузки библиотеки DLL можно использовать функцию GetProcAddress 


В вашем случае мы имеем 1-й вариант. Вы собрали проект, но при выполнении программы на другой машине, загрузчик начинает искать необходимый файл DLL и не находит его. Следовательно, собрано у вас все верно, необходимо просто перенести на нужную машину все необходимы файлы.

Есть одни нюанс - это пути поиска DLL загрузчиом, то есть DLL нужно расположить в нужной папке.

Windows выполняет поиск библиотек DLL в следующей последовательности:
1. Каталог, в котором находится исполняемый модуль текущего процесса.
2. Текущий каталог.
3. Системный каталог Windows. Путь к этому каталогу извлекается с помощью функции GetSystemDirectory.
4. Каталог Windows. Путь к этому каталогу извлекается с помощью функции GetWindowsDirectory.
5. Каталоги, указанные в переменной среды PATH.
newbie
Activity: 5
Merit: 0
Добрый день.
Ни как не могу разобраться со сборкой кошелька под Windows 7 Pro SP1
В exe файл не включается боблиотека LIBTIFF-5_.DLL

Собирается без ошибок, на моём компьютере программа работае отлично.
Но на других пишет, что нет библиотеки "LIBTIFF-5_.DLL"

При помощи программы Dependency Walker нашел библиотеку у себя на компьютере: C:\Strawberry\c\bin\libtiff-5_.dll

Пробовал добавить в файл PRO следующие строки:
INCLUDEPATH += C:/Strawberry/c/include
LIBS += C:/Strawberry/c/lib/libtiff.a
Ни чего не меняется - Ошибок нет, библиотека не включается в статическую сборку.

папка C:\deps
boost_1_57_0
db-4.8.30.NC
openssl-1.0.1j

QT = qt-everywhere-opensource-src-5.6.2.zip
MinGW = i686-4.9.2-release-posix-dwarf-rt_v4-rev4.7z
MSYS = MSYS-1.0.11.exe
Perl = strawberry-perl-5.24.1.1-32bit.msi
Python = python-3.6.1.exe

Собирал Qt так:
configure -release -static -opensource -confirm-license -no-sql-sqlite -no-opengl -qt-zlib -qt-libpng -qt-libjpeg -nomake examples
mingw32-make

Собираю кошелёк так:
set PATH=%PATH%;C:\Qt\562\qtbase\bin
qmake "USE_UPNP=-" "RELEASE=1" CrocodileCash-qt.pro
mingw32-make -f Makefile.Release

Подскажите, где ошибка?
Jump to: