Go back to Richel Bilderbeek's homepage.
Go back to Richel Bilderbeek's C++ page.
Version of wchar.h:718: error: expected initializer before 'throw'
when using i586-mingw32msvc.
Compile error (BEI 1) I encountered while busy solving
How to cross-compile a Qt Creator project from Ubuntu to a windows executable: example 3: console application with a Boost library.
Quick solution
Re-install mingw32. For me, that solved this error, but still needed to solve the following error
(stdio.h:430: error: expected initializer before 'throw').
System specifics
Operating system: Ubuntu 10.04 LTS Lucid Lynx
IDE: gedit
Source code: main.cpp
Process
Because I was trying to solve the Qt FAQ
How to cross-compile a Qt Creator project from Ubuntu to a windows executable?,
I compiled the code as follows:
i586-mingw32msvc-g++ -o MyWin.exe main.cpp -I/usr/include -I/usr/include/boost -L/usr/local/lib -lboost_filesystem
|
Or using the more elaborate form:
i586-mingw32msvc-g++ -V 4.4.2 -x c++ -o MyWin.exe main.cpp -I/usr/include -I/usr/include/boost -L/usr/local/lib -lboost_filesystem
|
This resulted in the following screen output:
In file included from /usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/cwchar:47,
from /usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/bits/postypes.h:42,
from /usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/iosfwd:42,
from /usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/ios:39,
from /usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/ostream:40,
from /usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/iostream:40,
from main.cpp:11:
/usr/include/wchar.h:718: error: expected initializer before 'throw'
In file included from /usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/bits/postypes.h:42,
from /usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/iosfwd:42,
from /usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/ios:39,
from /usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/ostream:40,
from /usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/iostream:40,
from main.cpp:11:
/usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/cwchar:148: error: '::fwide' has not been declared
/usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/cwchar:149: error: '::fwprintf' has not been declared
/usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/cwchar:150: error: '::fwscanf' has not been declared
/usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/cwchar:159: error: '::swprintf' has not been declared
/usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/cwchar:160: error: '::swscanf' has not been declared
/usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/cwchar:162: error: '::vfwprintf' has not been declared
/usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/cwchar:166: error: '::vswprintf' has not been declared
/usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/cwchar:170: error: '::vwprintf' has not been declared
/usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/cwchar:200: error: '::wprintf' has not been declared
/usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/cwchar:201: error: '::wscanf' has not been declared
In file included from /usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/cstdio:45,
from /usr/lib/gcc/i586-mingw32msvc/4.4.2/include/c++/fstream:43,
from /usr/include/boost/filesystem/operations.hpp:32,
from /usr/include/boost/filesystem.hpp:16,
from main.cpp:15:
/usr/include/stdio.h:432: error: expected initializer before 'throw'
/usr/include/stdio.h:488: error: expected initializer before 'throw'
|
Zooming in on the first error:
/usr/include/wchar.h:718: error: expected initializer before 'throw'<br/>
|
Take a look at /usr/include/whar.h line 718:
extern int __REDIRECT (vswscanf, (__const wchar_t *__restrict __s,
__const wchar_t *__restrict __format,
__gnuc_va_list __arg), __isoc99_vswscanf)
__THROW /* __attribute__ ((__format__ (__wscanf__, 2, 0))) */; //THIS LINE
|
It seems as if a re-throw (that is, a throw without arguments)
is unsupported by i586-mingw32msvc-g++. Is it true that wchar.h is a C library file, as stated in its licence?
I tried to reinstall mingw:
sudo apt-get install mingw32
|
This solved this error, and replace it by the following:
In file included from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/cstdio:53,
from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/i586-mingw32msvc/bits/c++locale.h:49,
from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/iosfwd:45,
from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/ios:43,
from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/ostream:45,
from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/iostream:45,
from main.cpp:5:
/usr/include/stdio.h:430: error: expected initializer before 'throw'
/usr/include/stdio.h:488: error: expected initializer before 'throw'
In file included from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/cwchar:55,
from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/bits/postypes.h:46,
from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/iosfwd:49,
from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/ios:43,
from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/ostream:45,
from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/iostream:45,
from main.cpp:5:
/usr/include/wchar.h:718: error: expected initializer before 'throw'
In file included from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/bits/postypes.h:46,
from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/iosfwd:49,
from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/ios:43,
from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/ostream:45,
from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/iostream:45,
from main.cpp:5:
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/cwchar:153: error: '::fwide' has not been declared
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/cwchar:154: error: '::fwprintf' has not been declared
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/cwchar:155: error: '::fwscanf' has not been declared
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/cwchar:164: error: '::swprintf' has not been declared
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/cwchar:165: error: '::swscanf' has not been declared
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/cwchar:167: error: '::vfwprintf' has not been declared
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/cwchar:171: error: '::vswprintf' has not been declared
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/cwchar:175: error: '::vwprintf' has not been declared
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/cwchar:205: error: '::wprintf' has not been declared
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include/c++/cwchar:206: error: '::wscanf' has not been declared
|
Go back to Richel Bilderbeek's C++ page.
Go back to Richel Bilderbeek's homepage.
