Boost logo

Boost Users :

Subject: [Boost-users] Using Boost.Test on 64-bit OSX
From: Michael Dickey (mike_at_[hidden])
Date: 2009-01-25 01:51:49


I can't seem to get Boost's unit test framework to work on OS X
Leopard (10.5) when using "-arch x86_64" for 64-bit builds (note: the
programs I build using boost seem to work fine, but the unit tests
blow up). I have Xcode 3.1.2 installed, and the results are the same
if I'm using gcc 4.0 or 4.2. I used the 32_64.diff patch from trac to
make 4-way Universal boost libraries (https://svn.boost.org/trac/boost/ticket/1679
). Any ideas would be greatly appreciated =)

Thanks,
-Mike

Without "-arch x86_64" (defaults to 32-bit intel):

Mikes-Mac-Pro:~ mdickey$ g++ -DBOOST_TEST_DYN_LINK -I/usr/local/
include/boost-1_37 -L/usr/local/lib -lboost_unit_Test_framework-xgcc42-
mt -o test test.cpp
Mikes-Mac-Pro:~ mdickey$ ./test
Running 5 test cases...

*** No errors detected

With "-arch x86_64":

Mikes-Mac-Pro:~ mdickey$ g++ -arch x86_64 -DBOOST_TEST_DYN_LINK -I/usr/
local/include/boost-1_37 -L/usr/local/lib -lboost_unit_Test_framework-
xgcc42-mt -o test test.cpp
Mikes-Mac-Pro:~ mdickey$ ./test --log_level=all
Running 5 test cases...
Entering test suite "simple-unit-test"
Entering test suite "SimpleTests_S"
Entering test case "test1"
Test case test1 doesn't include any assertions
Leaving test case "test1"; testing time: 22mks
Entering test case "test2"
Test case test2 doesn't include any assertions
Leaving test case "test2"; testing time: 15mks
Entering test case "test3"
Test case test3 doesn't include any assertions
Leaving test case "test3"; testing time: 16mks
Entering test case "test4"
Test case test4 doesn't include any assertions
Leaving test case "test4"; testing time: 15mks
Entering test case "test5"
Test case test5 doesn't include any assertions
Leaving test case "test5"; testing time: 14mks
Leaving test suite "SimpleTests_S"
Leaving test suite "simple-unit-test"

*** No errors detected
test(93789) malloc: *** error for object 0x30001001004d0: Non-aligned
pointer being freed (2)
*** set a breakpoint in malloc_error_break to debug
test(93789) malloc: *** error for object 0x30001001005d0: Non-aligned
pointer being freed (2)
*** set a breakpoint in malloc_error_break to debug
test(93789) malloc: *** error for object 0x30001001006c0: Non-aligned
pointer being freed (2)
*** set a breakpoint in malloc_error_break to debug
test(93789) malloc: *** error for object 0x30001001007c0: Non-aligned
pointer being freed (2)
*** set a breakpoint in malloc_error_break to debug

gdb backtrace to malloc_error_break (note above that it's happening
after completion of all tests):

#0 0x00007fff810a9a11 in malloc_error_break ()
#1 0x00007fff810a4a90 in szone_error ()
#2 0x00000001000156ec in ~framework_impl [inlined] () at impl/
framework.ipp:133
#3 0x00000001000156ec in __tcf_1 () at impl/framework.ipp:222
#4 0x00007fff8100131c in __cxa_finalize ()
#5 0x00007fff81001232 in exit ()
#6 0x0000000100001057 in start ()

Confirm test program is a 64-bit executable:

Mikes-Mac-Pro:~ mdickey$ file test
test: Mach-O 64-bit executable x86_64

Dynamic linkage of test program:

Mikes-Mac-Pro:~ mdickey$ otool -L test
test:
        libboost_unit_test_framework-xgcc42-mt-1_37.dylib (compatibility
version 0.0.0, current version 0.0.0)
        /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current
version 7.4.0)
        /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current
version 1.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current
version 111.1.3)

Confirm Universal/FAT build of Boost libraries:

Mikes-Mac-Pro:~ mdickey$ file /usr/local/lib/
libboost_unit_test_framework-xgcc42-mt.dylib
/usr/local/lib/libboost_unit_test_framework-xgcc42-mt.dylib: Mach-O
universal binary with 4 architectures
/usr/local/lib/libboost_unit_test_framework-xgcc42-mt.dylib (for
architecture i386): Mach-O dynamically linked shared library i386
/usr/local/lib/libboost_unit_test_framework-xgcc42-mt.dylib (for
architecture ppc7400): Mach-O dynamically linked shared library ppc
/usr/local/lib/libboost_unit_test_framework-xgcc42-mt.dylib (for
architecture x86_64): Mach-O 64-bit dynamically linked shared library
x86_64
/usr/local/lib/libboost_unit_test_framework-xgcc42-mt.dylib (for
architecture ppc64): Mach-O 64-bit dynamically linked shared library
ppc64

Source code for test.cpp (note that if I have just one or two test
cases it doesn't crash.. having several IS significant):

#define BOOST_TEST_MODULE simple-unit-test

#include <boost/test/unit_test.hpp>

class SimpleFixture {
public:
        SimpleFixture() {}
        virtual ~SimpleFixture() {}
};

BOOST_FIXTURE_TEST_SUITE(SimpleTests_S, SimpleFixture)

BOOST_AUTO_TEST_CASE(test1) {}
BOOST_AUTO_TEST_CASE(test2) {}
BOOST_AUTO_TEST_CASE(test3) {}
BOOST_AUTO_TEST_CASE(test4) {}
BOOST_AUTO_TEST_CASE(test5) {}

BOOST_AUTO_TEST_SUITE_END()


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net