Bitcoin Forum
June 22, 2024, 02:09:28 AM *
News: Voting for pizza day contest
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: LIBTIFF-5_.DLL не линкуется в статическую сборку под Windows  (Read 393 times)
forefinger (OP)
Newbie
*
Offline Offline

Activity: 5
Merit: 0


View Profile
October 14, 2017, 06:11:46 AM
 #1

Добрый день.
Ни как не могу разобраться со сборкой кошелька под 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

Подскажите, где ошибка?
langoner
Newbie
*
Offline Offline

Activity: 45
Merit: 0


View Profile
October 16, 2017, 09:23:10 AM
 #2

Если я правильно понял, то у вас возникает ошибка при запуске собранного проекта на другой машине. Ошибка заключается в том, что не может найти 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.
forefinger (OP)
Newbie
*
Offline Offline

Activity: 5
Merit: 0


View Profile
October 16, 2017, 12:43:53 PM
 #3

Спасибо за развёрнутый ответ.

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

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

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

Вопрос: Как исправить? почему так происходит?
Coin-1
Legendary
*
Offline Offline

Activity: 2492
Merit: 2232



View Profile
October 17, 2017, 12:35:07 AM
 #4

Спасибо за развёрнутый ответ.

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

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

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

Вопрос: Как исправить? почему так происходит?
Возможно, Вам нужно найти другую версию или сборку требуемой библиотеки.
forefinger (OP)
Newbie
*
Offline Offline

Activity: 5
Merit: 0


View Profile
October 18, 2017, 05:11:57 AM
 #5

Вопрос решился переустановкой Windows.

Возможно, слишком резкое решение, но моя виндовс давно нуждалась в переустановке Smiley
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!