metrowerks cw runtime failures

Hi, Ever since I fixed bug with locale/manipulators handling (particularly I added std::locate-support to the list of requirements in Jamfile for Boost.Test libs) all cw-8_3 tests seems to be crashing at runtime. From what I see it's somewhere in iostream implementation. Also I noticed following in build log: ### mwld Linker Warning: # Multiply defined symbol: std::ios_base::ios_base(void) (??0ios_base@std@@IAE@XZ) in # files test_tools.obj (libboost_test_exec_monitor.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll ### mwld Linker Warning: # Multiply defined symbol: long std::ios_base::precision(long) (?precision@ios_base@std@@QAEJJ@Z) in # files test_tools.obj (libboost_test_exec_monitor.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll ### mwld Linker Warning: # Multiply defined symbol: void std::ios_base::setstate(enum std::ios_base::iostate) (?setstate@ios_base@std@@QAEXW1iostate@12@@Z) in # files test_tools.obj (libboost_test_exec_monitor.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll ### mwld Linker Warning: # Multiply defined symbol: long std::ios_base::width(long) (?width@ios_base@std@@QAEJJ@Z) in # files test_tools.obj (libboost_test_exec_monitor.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll ### mwld Linker Warning: # Multiply defined symbol: bool std::ios_base::fail(void) const (?fail@ios_base@std@@QBE_NXZ) in # files test_tools.obj (libboost_test_exec_monitor.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll ### mwld Linker Warning: # Multiply defined symbol: enum std::ios_base::fmtflags std::ios_base::flags(void) const (?flags@ios_base@std@@QBE?AW3fmtflags@12@XZ) in # files test_tools.obj (libboost_test_exec_monitor.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll ### mwld Linker Warning: # Multiply defined symbol: void * std::ios_base::rdbuf(void) const (?rdbuf@ios_base@std@@QBEPAXXZ) in # files test_tools.obj (libboost_test_exec_monitor.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll ### mwld Linker Warning: # Multiply defined symbol: enum std::ios_base::iostate & std::ios_base::state(void) (?state@ios_base@std@@IAEAAW1iostate@12@XZ) in # files test_tools.obj (libboost_test_exec_monitor.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll ### mwld Linker Warning: # Multiply defined symbol: enum std::ios_base::iostate std::ios_base::exceptions(void) const (?exceptions@ios_base@std@@QBE?AW1iostate@12@XZ) in # files test_tools.obj (libboost_test_exec_monitor.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll ### mwld Linker Warning: # Multiply defined symbol: long std::ios_base::width(void) const (?width@ios_base@std@@QBEJXZ) in # files test_tools.obj (libboost_test_exec_monitor.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll ### mwld Linker Warning: # Multiply defined symbol: bool std::ios_base::good(void) const (?good@ios_base@std@@QBE_NXZ) in # files test_tools.obj (libboost_test_exec_monitor.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll ### mwld Linker Warning: # Multiply defined symbol: enum std::ios_base::iostate std::ios_base::rdstate(void) const (?rdstate@ios_base@std@@QBE?AW1iostate@12@XZ) in # files test_tools.obj (libboost_test_exec_monitor.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll ### mwld Linker Note: # Including default library "MSL_All_x86.lib" ### mwld Linker Warning: # Multiply defined section: std::__nInit::__nInit(void) (??0__nInit@std@@QAE@XZ) in # files iostream.obj (MSL_All_x86.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll ### mwld Linker Warning: # Multiply defined section: std::__nInit::~__nInit(void) (??1__nInit@std@@QAE@XZ) in # files iostream.obj (MSL_All_x86.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll ### mwld Linker Warning: # Multiply defined section: std::__wInit::__wInit(void) (??0__wInit@std@@QAE@XZ) in # files iostream.obj (MSL_All_x86.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll ### mwld Linker Warning: # Multiply defined section: std::__wInit::~__wInit(void) (??1__wInit@std@@QAE@XZ) in # files iostream.obj (MSL_All_x86.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll ### mwld Linker Warning: # Multiply defined section: __CRTStartup in # files startup.win32.obj (MSL_All_x86.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll ### mwld Linker Warning: # Multiply defined section: __CleanUpMSL in # files startup.win32.obj (MSL_All_x86.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll ### mwld Linker Warning: # Multiply defined section: _fclose in # files file_io.obj (MSL_All_x86.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll ### mwld Linker Warning: # Multiply defined section: _fflush in # files file_io.obj (MSL_All_x86.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll # Too many warnings printed, suppressing warnings for current file Is there any way to address this? Gennadiy

On May 1, 2005, at 1:28 PM, Gennadiy Rozental wrote:
Ever since I fixed bug with locale/manipulators handling (particularly I added std::locate-support to the list of requirements in Jamfile for Boost.Test libs) all cw-8_3 tests seems to be crashing at runtime. From what I see it's somewhere in iostream implementation. Also I noticed following in build log:
### mwld Linker Warning: # Multiply defined symbol: std::ios_base::ios_base(void) (??0ios_base@std@@IAE@XZ) in # files test_tools.obj (libboost_test_exec_monitor.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll
The 8.3 version of CodeWarrior for Windows does not support locales from dynamic libs. The UseDLLPrefix.h header is commonly used to properly set up the import/export flags. This header will also #define _MSL_NO_LOCALE which disables locale support. When linked against static versions of MSL_All, full locale support is available. -Howard

Ever since I fixed bug with locale/manipulators handling (particularly I added std::locate-support to the list of requirements in Jamfile for Boost.Test libs) all cw-8_3 tests seems to be crashing at runtime. From what I see it's somewhere in iostream implementation. Also I noticed following in build log:
### mwld Linker Warning: # Multiply defined symbol: std::ios_base::ios_base(void) (??0ios_base@std@@IAE@XZ) in # files test_tools.obj (libboost_test_exec_monitor.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll
The 8.3 version of CodeWarrior for Windows does not support locales from dynamic libs. The UseDLLPrefix.h header is commonly used to properly set up the import/export flags. This header will also #define _MSL_NO_LOCALE which disables locale support.
When linked against static versions of MSL_All, full locale support is available.
-Howard
From what I see it was linked against static version of library (that what std::locale-support does). Linker produced only warnings. So what should I do to eliminate runtime crash?
Gennadiy

Gennadiy Rozental wrote:
Ever since I fixed bug with locale/manipulators handling (particularly I added std::locate-support to the list of requirements in Jamfile for Boost.Test libs) all cw-8_3 tests seems to be crashing at runtime. From what I see it's somewhere in iostream implementation. Also I noticed following in build log:
### mwld Linker Warning: # Multiply defined symbol: std::ios_base::ios_base(void) (??0ios_base@std@@IAE@XZ) in # files test_tools.obj (libboost_test_exec_monitor.lib), MSL_All-DLL80_x86_D.dll (MSL_All-DLL_x86_D.lib), keeping definition in MSL_All-DLL80_x86_D.dll
The 8.3 version of CodeWarrior for Windows does not support locales from dynamic libs. The UseDLLPrefix.h header is commonly used to properly set up the import/export flags. This header will also #define _MSL_NO_LOCALE which disables locale support.
When linked against static versions of MSL_All, full locale support is available.
-Howard
From what I see it was linked against static version of library (that what std::locale-support does). Linker produced only warnings. So what should I do to eliminate runtime crash?
If you really must know.. 1. Don't use std::locale-support in the test libs. 2. Remove code that needs std::locale from Boost.Test. I know that second one might seem draconian, but I've been looking at how to fix it at the BBv1 level, and I don't think it's possible. To allow having that std::locale-support requirement on the test libs means changing *every* Jamfile that references the test libs to also have the std::locale-support requirement. Which means that if every test we have uses one of the Boost.Test libraries then *every* test that uses a DLL will break for CodeWarrior. I have a question.. Is std::locale support really required by Boost.Test? -- -- Grafik - Don't Assume Anything -- Redshift Software, Inc. - http://redshift-software.com -- rrivera/acm.org - grafik/redshift-software.com -- 102708583/icq - grafikrobot/aim - Grafik/jabber.org

Is std::locale support really required by Boost.Test?
No really. Again I only needed this option to workaround inability CW to compile io_saver staff. I am using it to properly restore state of the streams used by Boost.Test agents. I guess I could disable this feature for CW completely and accept that it will cause an incorrect output for some tests. Is this 8.3 specific? Another option would be to make io_saver header to compile properly using CW in case if std::locate-support is not set in Jamfile Gennadiy

Gennadiy Rozental wrote:
Is std::locale support really required by Boost.Test?
No really. Again I only needed this option to workaround inability CW to compile io_saver staff. I am using it to properly restore state of the streams used by Boost.Test agents. I guess I could disable this feature for CW completely and accept that it will cause an incorrect output for some tests. Is this 8.3 specific?
Another option would be to make io_saver header to compile properly using CW in case if std::locate-support is not set in Jamfile
Hold on to that thought.. I'm making exactly those changes. I'll post about it shortly. -- -- Grafik - Don't Assume Anything -- Redshift Software, Inc. - http://redshift-software.com -- rrivera/acm.org - grafik/redshift-software.com -- 102708583/icq - grafikrobot/aim - Grafik/jabber.org

Rene Rivera wrote:
Gennadiy Rozental wrote:
I have a question..
Is std::locale support really required by Boost.Test?
Never mind; I answered my own question. It's boost/io/ios_state.hpp that wants locale support, and Boost.Test is using that. -- -- Grafik - Don't Assume Anything -- Redshift Software, Inc. - http://redshift-software.com -- rrivera/acm.org - grafik/redshift-software.com -- 102708583/icq - grafikrobot/aim - Grafik/jabber.org

I don't know it would be helpful but for what its worth, the serialization library Jamfiles arrange to skip those combinations of tests/libraries which depend upon wide char i/o. The skipped combinations appear as white squares on the test matrix - which is fine by bme. Just a thought. Robert Ramey
I know that second one might seem draconian, but I've been looking at how to fix it at the BBv1 level, and I don't think it's possible. To allow having that std::locale-support requirement on the test libs means changing *every* Jamfile that references the test libs to also have the std::locale-support requirement. Which means that if every test we have uses one of the Boost.Test libraries then *every* test that uses a DLL will break for CodeWarrior.
I have a question..
Is std::locale support really required by Boost.Test?
participants (4)
-
Gennadiy Rozental
-
Howard Hinnant
-
Rene Rivera
-
Robert Ramey