現在、別のプログラムで使用する DLL を作成しようとしています。この DLL では、boost::system を必要とする boost::thread にある条件変数を使用しています。ブースト ライブラリを静的にリンクして、プログラムが自分の dll のみを必要とし、ブーストからは何も必要としないようにしたいと考えています。
スレッド ライブラリを静的にリンクできるので、プログラムにブースト スレッド 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 にのみリンクするように、すべてを正しくリンクするにはどうすればよいですか?? コードブロック、ブースト 1.53、および MinGW 4.4.1 を使用しています
前もって感謝します