Boost logo

Boost :

From: John Maddock (john_at_[hidden])
Date: 2007-11-23 13:31:39


Robert Ramey wrote:
> When I look at the trunk results I see the following:
>
> a) failure due to the fact that wide character serialization won't
> build for certain platforms. On the branch, I tweaked to test/Jamfile
> to make some tests depended on test results on in test/config.
> So that tests which don't make sense aren't run. This works
> on my system but I have no idea whether its kosher. In Jamfiles
> for V1, this was addressed but that code was broken when
> things moved to V2. I don't know if this combination was tested
> with 1.34 so I don't know if reverting would help here.

Ah, I think the errors in the log reports are misleading, when building with
Minw I see:

gcc.link.dll
..\..\..\bin.v2\libs\serialization\build\gcc-mingw-mw\debug\boost_s
erialization-mgw-d-1_35.lib
..\..\..\bin.v2\libs\serialization\build\gcc-mingw-m
w\debug\boost_serialization-mgw-d-1_35.dll
Creating library file:
..\..\..\bin.v2\libs\serialization\build\gcc-mingw-mw\deb
ug\boost_serialization-mgw-d-1_35.lib
..\..\..\bin.v2\libs\serialization\build\gcc-mingw-mw\debug\codecvt_null.o:
In f
unction
`ZNSt23__codecvt_abstract_baseIwciED1Ev':C:/MinGW/bin/../lib/gcc/mingw32
/3.4.2/../../../../include/c++/3.4.2/bits/codecvt.h:(.rdata$_ZTVN5boost7archive1
2codecvt_nullIwEE[vtable for boost::archive::codecvt_null<wchar_t>]+0x14):
undef
ined reference to `std::codecvt<wchar_t, char, int>::do_unshift(int&, char*,
cha
r*, char*&) const'
:C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/codecv
t.h:(.rdata$_ZTVN5boost7archive12codecvt_nullIwEE[vtable for
boost::archive::cod
ecvt_null<wchar_t>]+0x20): undefined reference to `std::codecvt<wchar_t,
char, i
nt>::do_always_noconv() const'
:C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/codecv
t.h:(.rdata$_ZTVN5boost7archive12codecvt_nullIwEE[vtable for
boost::archive::cod
ecvt_null<wchar_t>]+0x24): undefined reference to `std::codecvt<wchar_t,
char, i
nt>::do_length(int&, char const*, char const*, unsigned int) const'
:C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/codecv
t.h:(.rdata$_ZTVSt7codecvtIwciE[vtable for std::codecvt<wchar_t, char,
int>]+0x1
0): undefined reference to `std::codecvt<wchar_t, char, int>::do_out(int&,
wchar
_t const*, wchar_t const*, wchar_t const*&, char*, char*, char*&) const'
:C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/codecv
t.h:(.rdata$_ZTVSt7codecvtIwciE[vtable for std::codecvt<wchar_t, char,
int>]+0x1
4): undefined reference to `std::codecvt<wchar_t, char,
int>::do_unshift(int&, c
har*, char*, char*&) const'
:C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/codecv
t.h:(.rdata$_ZTVSt7codecvtIwciE[vtable for std::codecvt<wchar_t, char,
int>]+0x1
8): undefined reference to `std::codecvt<wchar_t, char, int>::do_in(int&,
char c
onst*, char const*, char const*&, wchar_t*, wchar_t*, wchar_t*&) const'
:C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/codecv
t.h:(.rdata$_ZTVSt7codecvtIwciE[vtable for std::codecvt<wchar_t, char,
int>]+0x1
c): undefined reference to `std::codecvt<wchar_t, char, int>::do_encoding()
cons
t'
:C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/codecv
t.h:(.rdata$_ZTVSt7codecvtIwciE[vtable for std::codecvt<wchar_t, char,
int>]+0x2
0): undefined reference to `std::codecvt<wchar_t, char,
int>::do_always_noconv()
 const'
:C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/codecv
t.h:(.rdata$_ZTVSt7codecvtIwciE[vtable for std::codecvt<wchar_t, char,
int>]+0x2
4): undefined reference to `std::codecvt<wchar_t, char,
int>::do_length(int&, ch
ar const*, char const*, unsigned int) const'
:C:/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/codecv
t.h:(.rdata$_ZTVSt7codecvtIwciE[vtable for std::codecvt<wchar_t, char,
int>]+0x2
8): undefined reference to `std::codecvt<wchar_t, char,
int>::do_max_length() co
nst'
collect2: ld returned 1 exit status

So this is a linker error in building the *narrow character* serialization
library: there are several tests in Date-time and elsewhere that are then
also failing because of this.

This may be caused by the change to BBv2 though: as dynamic rather than
static linking is now the default.

The easy hack I guess would be to enforce static linking only of
Boost.Serialization on MingW32 (as the tests do build with link=static), but
it would be better to #ifdef the code so as not to use wide character
primitives in the first place.

> b) tests of portable_binary_demo fail on high endien platforms.
> This demo illustrates how to add functionality to an archive
> via derivation. However, changes to binary_archive at
> a basic level break this idea for binary archives. This this
> demo is broken and in no longer serves its original purpose.
> I haven't had time to replace it.

If it's broken or outdated it should probably be removed from SVN for now:
ultimately it would be confusing to end users to have a broken example in
the distribution.

HTH, John.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk