Actually, please disregard the part about my own tests building but crashing. I figured it out, it was due to a mismatch between standard C++ library versions used by the shared library and the main program. I do know I have to watch out for this as Boost build defaults to the wrong one but during the attempts to make things work I apparently wasn't careful enough and did a bad build. Sorry about that. On Sat, Nov 08, 2014 at 04:54:07PM +0100, Latimerius wrote:
Hello Richard,
Thanks for your reply! Please see my comments inline.
On Fri, Nov 07, 2014 at 04:14:41PM +0000, Richard wrote:
[Please do not mail me a copy of your followup]
Latimerius
spake the secret code <20141107175110.GA3432@kostra.uh.cz> thusly: [...] However, all attempts so far failed due to
Undefined symbols for architecture x86_64: "_main", referenced from: implicit entry/start for main executable ld: symbol(s) not found for architecture x86_64
When you compiled your test program, did you define BOOST_TEST_MAIN in one of your source files before including the boost.test headers?
I was speaking here about the examples supplied with the library. My problem is that when I download Boost and compile it (using the procedure described in my previous message), the examples (in
/libs/test/example) don't build for me for some reason, and the error message is the one concerning missing main(). As far as my own attempts go, those do build curiously enough, but the resulting program crashes while exiting the main function, and its output is garbled:
Running 2 test cases... InputWindowTest.cpp:14: error in "=@???DP?:7|??DP???DP?:7|": check *** 1 failure detected (1953719668 failures expected) in test suite "Segmentation fault: 11
The program is as follows:
#include "InputWindow.h"
#define BOOST_TEST_MODULE EventActionMgr #include
BOOST_AUTO_TEST_CASE (EventAction_test) { ui::EventAction a; BOOST_CHECK (a.RunHandlers () == true); }
built with
clang++ -g -Wall -std=c++11 -stdlib=libc++ -DBOOST_TEST_DYN_LINK -I.. -I ../../.. -I/usr/local/boost_1_57_0/include -L/usr/local/boost_1_57_0/lib InputWindowTest.cpp -o InputWindowTest -lboost_unit_test_framework
I suspect memory corruption. The way the output is garbled varies with the argument of BOOST_TEST_MODULE. Whether I do or do not #define BOOST_TEST_MAIN doesn't seem to matter.
As for where the crash happens: a test run with zero detected failures crashes after main(). A run with failures usually crashes while trying to print a failure. I suspect something wrong might be happening at the boundary between the main program and the shared library (libboost_unit_test_framework.dylib).
Someone needs to supply a definition of main and if you ask boost.test to do it by defining that symbol before including the headers, it will provide one for you.
Try looking at my documentation here and see if this clears things up: http://user.xmission.com/~legalize/boost.test/libs/test/doc/html/test/guide/...
Thanks for the link, that's good info! I somehow missed it before.
Thanks again,
pvl