In the boost unit testing documentation it specifically states that you need to define BOOST_TEST_DYN_LINK in order to link with the boost unit test library.
I am using this basic example:
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE test_module1
// This header is for the dynamic library, not the header only one
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_CASE(test1) {
BOOST_CHECK(true);
}
I have added boost to my include/library paths and the code compiles fine, but when I compile boost unit tests using Visual Studio and try to run them I get the following error:
The application was unable to start correctly (0xc000003b).
I feel like I just need to point out how vague and not helpful this error message is at all...
For some reason if I remove the line #define BOOST_TEST_DYN_LINK
the code will compile and run successfully, but this goes directly against what the boost documentation says.
Why is this happening?
Additional info:
This is what I am using:
boost v1_63_0
I do not have any problems running your code. So I doubt there is a build problem in your case.
My boost is built this way (after going to the Boost source directory):
bootstrap.bat
.\b2.exe toolset=msvc -j 2 --with-test release link=shared stage
You then need to copy the DLLs under stage\lib to somewhere in your path, and add the appropriate Boost directories to your environment. For my command-line environment, I have (assuming you have done something like set BOOST_ROOT=C:\src\boost_1_65_1
):
set INCLUDE=%BOOST_ROOT%;%INCLUDE%
set LIB=%BOOST_ROOT%\stage\lib;%LIB%
Then I can successfully build your test code without any problems:
cl /EHsc /MD test.cpp
.\test.exe
Concerning the why, this is certainly because you are including/injecting both static and dynamic (dll) variants into your code. That may happen in MSVC because Boost uses the auto linking facility of the compiler. I always use BOOST_ALL_NO_LIB
to disable auto-linking and have full control over the linked libraries.
In particular, the auto-link libraries, when used, are not visible on the link options, which make the problems harder to catch.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With