Статическое связывание Boost System в DLL для использования в другой программе

В настоящее время я пытаюсь написать DLL для использования в другой программе. В этой DLL я использую условные переменные, которые находятся в boost:: thread, который требует boost:: system. Я хочу статически связать библиотеки boost, чтобы моей программе нужен был только мой dll и ничего от boost.

Я могу статически связать библиотеку потоков, так что мне не нужно давать моей программе расширенный поток DLL. Но я не могу получить статические ссылки для работы с boost:: system. Пока что это будет работать, только если я буду динамически связывать его. Статически я получаю следующую ошибку компиляции при компиляции моей программы

E:\boost\boost_1_53_0\boost\system\error_code.hpp|214|undefined reference to `boost::system::generic_category()'|

Вот мой вывод консоли при сборке DLL

-------------- Build: Debug in myProgram_DLL ---------------

mingw32-g++.exe  -Wall -g -DBUILD_DLL -DBOOST_THREAD_USE_LIB -DBOOST_SYSTEM_NO_DEPRECATED    -I"Z:\Eigene Dateien Server\Andre\myProgram\myProgram_DLL\include" -IE:\boost\boost_1_53_0  -c "Z:\Eigene Dateien Server\Andre\myProgram\myProgram_DLL\src\MyProgramMessage.cpp" -o obj\Debug\src\MyProgramMessage.o
mingw32-g++.exe  -Wall -g -DBUILD_DLL -DBOOST_THREAD_USE_LIB -DBOOST_SYSTEM_NO_DEPRECATED    -I"Z:\Eigene Dateien Server\Andre\myProgram\myProgram_DLL\include" -IE:\boost\boost_1_53_0  -c "Z:\Eigene Dateien Server\Andre\myProgram\myProgram_DLL\src\MessageQueue.cpp" -o obj\Debug\src\MessageQueue.o
mingw32-g++.exe  -Wall -g -DBUILD_DLL -DBOOST_THREAD_USE_LIB -DBOOST_SYSTEM_NO_DEPRECATED    -I"Z:\Eigene Dateien Server\Andre\myProgram\myProgram_DLL\include" -IE:\boost\boost_1_53_0  -c "Z:\Eigene Dateien Server\Andre\myProgram\myProgram_DLL\main.cpp" -o obj\Debug\main.o
mingw32-g++.exe -shared -Wl,--output-def=bin\Debug\libmyProgram_DLL.dll.def -Wl,--out-implib=bin\Debug\libmyProgram_DLL.dll.a -Wl,--dll -LE:\boost\boost_1_53_0\bin.v2\libs\thread\build\gcc-mingw-4.4.1\debug\link-static\runtime-link-static\threading-multi -LE:\boost\boost_1_53_0\bin.v2\libs\system\build\gcc-mingw-4.4.1\debug\link-static\runtime-link-static\threading-multi  obj\Debug\src\MyProgramMessage.o obj\Debug\src\MessageQueue.o obj\Debug\main.o   -o bin\Debug\myProgram_DLL.dll  -luser32 -lboost_thread-mgw44-mt-sd-1_53 -lboost_system-mgw44-mt-sd-1_53 
Creating library file: bin\Debug\libmyProgram_DLL.dll.a
Output size is 2.10 MB
Process terminated with status 0 (0 minutes, 2 seconds)
0 errors, 0 warnings

Вот мой вывод на консоль при сборке тестовой программы

-------------- Build: Debug in myProgram_DLL_Test ---------------

mingw32-g++.exe -Wall  -g    -I"Z:\Eigene Dateien Server\Andre\myProgram\myProgram_DLL" -IE:\boost\boost_1_53_0 -IE:\boost\boost_1_53_0\bin.v2\libs -I"Z:\Eigene Dateien Server\Andre\myProgram\myProgram_DLL\src" -I"Z:\Eigene Dateien Server\Andre\myProgram\myProgram_DLL\include"  -c "Z:\Eigene Dateien Server\Andre\myProgram\myProgram_DLL_Test\main.cpp" -o obj\Debug\main.o
mingw32-g++.exe -LE:\boost\boost_1_53_0 -L"Z:\Eigene Dateien Server\Andre\myProgram\myProgram_DLL\bin\Debug"  -o bin\Debug\myProgram_DLL_Test.exe obj\Debug\main.o    -lmyProgram_DLL 
obj\Debug\main.o: In function `_static_initialization_and_destruction_0':
E:/boost/boost_1_53_0/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()'
E:/boost/boost_1_53_0/boost/system/error_code.hpp:215: undefined reference to `boost::system::generic_category()'
E:/boost/boost_1_53_0/boost/system/error_code.hpp:216: undefined reference to `boost::system::system_category()'
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 1 seconds)
3 errors, 0 warnings

Если я свяжу следующий файл с моей тестовой программой, он скомпилирует

E:\boost\boost_1_53_0\bin.v2\libs\system\build\gcc-mingw-4.4.1\debug\link-static\runtime-link-static\threading-multi\libboost_system-mgw44-mt-sd-1_53

Я обнаружил множество потоков, связанных с моей ошибкой, но только те, которые связаны с привязкой boost:: system к проекту. Я хочу, чтобы избежать этого и только ссылка boost:: system на мою DLL

Как я могу связать все правильно, чтобы мне не нужно было связывать систему наддува с моей тестовой программой, только с моей DLL?? Я использую блоки кода, Boost 1.53 и MinGW 4.4.1

заранее спасибо

1 ответ

Решение

В порядке,

Я решил свою проблему. Это было связано с тем, как я включал заголовки. Мои заголовочные файлы классов были определены в моем заголовочном файле dll, поэтому, когда я включил заголовочный файл dll в свой exe-проект, он захотел, чтобы я связал некоторые библиотеки boost и т.д., которые используются в классах.

Перемещая include в мой dll main.cpp, проблема была исправлена. Теперь мне нужно только связать myDLL с моим проектом exe.

Например, у меня были такие включения:

myDLL.h

#include "myClass1.h"
#include "myClass2.h"

main.cpp // моего exe-проекта

#include "myDLL.h"

У меня сейчас так:

main.cpp // моего проекта dll

#include "myDLL.h"
#include "myClass1.h"
#include "myClass2.h"

main.cpp // моего exe-проекта

#include "myDLL.h"
Другие вопросы по тегам