New tool: crossreport
Richard W.M. Jones
rjones at redhat.com
Wed Feb 11 11:27:16 UTC 2009
Inspired by the discussion a few days ago about APIs, I've written a
tool which you can use to analyze your Linux binaries, find out what
APIs they are using, and generate a report. Hopefully people can use
this report to estimate how much work they need to do in order to port
their programs.
Two example reports are attached, from virt-viewer and inkscape.
There is no RPM yet because my Rawhide machine is currently doing RHEL
virt testing. For now you have to build the package yourself from the
Mercurial repository:
http://hg.et.redhat.com/cgi-bin/hg-misc.cgi/fedora-mingw--devel/file/tip/crossreport
Rich.
--
Richard Jones, Emerging Technologies, Red Hat http://et.redhat.com/~rjones
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine. Supports Linux and Windows.
http://et.redhat.com/~rjones/virt-df/
-------------- next part --------------
Cross-compilation report for: /usr/bin/virt-viewer
Report prepared on Wed Feb 11 11:15:25 2009.
Symbol database last updated on Wed Feb 11 10:23:49 2009 (0 days ago).
This table shows the supported APIs that this program uses,
including the number of different calls made to each API.
In most cases, you just need to arrange it so that your program
'BuildRequires' these RPMs and links to the libraries within them.
#calls RPM name
8 mingw32-glib2
11 mingw32-gtk-vnc
70 mingw32-gtk2
8 mingw32-libvirt
10 mingw32-libxml2
24 unresolved symbols were found. The full list of symbols
is listed as an appendix at the end of this report. In this
section we try to identify known portability problems from
this list of symbols.
Program uses: __stack_chk_fail
The -fstack-protector option may not work with the Fedora MinGW
cross-compiler at this time.
Program uses: close
Program uses POSIX open/close/read/write/... APIs. You should be
aware that Win32 provides functions with the same name which do not
have POSIX semantics. Simple file operations will be fine, but you
will not be able to, for example, open /dev/* or other special files,
and select, locking and other POSIX features will not work the same
way.
To get more reliable semantics, we suggest you use a portability
library such as Gnulib, glib2, QtCore, etc.
If you are using read/write on sockets, then this won't work on
Windows. You should use recv/send instead.
Program uses: dup
dup/dup2 may not work as expected in Win32.
To get more reliable semantics, we suggest you use a portability
library such as Gnulib, glib2, QtCore, etc.
Program uses: execvp
You cannot use fork to create new processes under Windows. You have
to replace calls to fork/exec with CreateProcess or CreateThread.
If your program forks in order to run in parallel or to create
multiple identical workers, then you may have to restructure the
program.
If your program needs to share resources such as file descriptors
across the fork, then some limited options are available through
CreateProcess, but nothing like as rich as what is available in
Unix.
For server programs, we suggest using a portability library tuned
for the needs of servers, such as Apache Portable Runtime.
Program uses: fork
You cannot use fork to create new processes under Windows. You have
to replace calls to fork/exec with CreateProcess or CreateThread.
If your program forks in order to run in parallel or to create
multiple identical workers, then you may have to restructure the
program.
If your program needs to share resources such as file descriptors
across the fork, then some limited options are available through
CreateProcess, but nothing like as rich as what is available in
Unix.
For server programs, we suggest using a portability library tuned
for the needs of servers, such as Apache Portable Runtime.
Program uses: getopt_long
GNU getopt_long is not available in Windows.
To get more reliable semantics, we suggest you use a portability
library such as Gnulib, glib2, QtCore, etc.
Program uses: socketpair
Program uses Berkeley sockets API. Windows has a reasonable facsimile
called Winsock. However it has some annoying API differences, in
particular: (1) You have to use WSAGetLastError instead of errno,
(2) error numbers have different names, (3) you cannot select on,
sockets, (4) a multitude of small API differences, (5) you have to
initialize Winsock before using it by calling WSAStartup.
To get more reliable semantics, we suggest you use a portability
library such as Gnulib, glib2, QtCore, etc.
If you are using read/write on sockets, then this won't work on
Windows. You should use recv/send instead.
Program uses: usleep
usleep/nanosleep system calls do not exist on Windows. You should
replace this with one of the Win32 equivalents such as Sleep.
To get more reliable semantics, we suggest you use a portability
library such as Gnulib, glib2, QtCore, etc.
Appendix - Full list of unresolved symbols
* = Symbol we were not able to give advice about. If you know
more about this symbol, consider providing a patch for the
CrossReport program.
? = Win32 should supply this symbol, or it can be ignored because
it is a side-effect of the Unix toolchain.
* __fprintf_chk
? __libc_start_main
* __snprintf_chk
* __sprintf_chk
__stack_chk_fail
* __strdup
? _exit
close
dup
execvp
fork
? fputc
? free
? fwrite
* gdk_pixbuf_save
getopt_long
* gtk_file_chooser_get_filename
? malloc
socketpair
? strcasecmp
? strchr
? strcmp
? strtol
usleep
-------------- next part --------------
Cross-compilation report for: /usr/bin/inkscape
Report prepared on Wed Feb 11 11:15:16 2009.
Symbol database last updated on Wed Feb 11 10:23:49 2009 (0 days ago).
This table shows the supported APIs that this program uses,
including the number of different calls made to each API.
In most cases, you just need to arrange it so that your program
'BuildRequires' these RPMs and links to the libraries within them.
#calls RPM name
74 mingw32-cairo
1 mingw32-cairomm
3 mingw32-fontconfig
8 mingw32-freetype
23 mingw32-gc
6 mingw32-gettext
260 mingw32-glib2
153 mingw32-glibmm24
1 mingw32-gmp
2 mingw32-gnutls
650 mingw32-gtk2
1095 mingw32-gtkmm24
26 mingw32-libpng
30 mingw32-libsigc++20
17 mingw32-libxml2
3 mingw32-libxslt
16 mingw32-openssl
61 mingw32-pango
8 mingw32-pangomm
6 mingw32-popt
5 mingw32-zlib
473 unresolved symbols were found. The full list of symbols
is listed as an appendix at the end of this report. In this
section we try to identify known portability problems from
this list of symbols.
Program uses: __stack_chk_fail
The -fstack-protector option may not work with the Fedora MinGW
cross-compiler at this time.
Program uses: close
Program uses POSIX open/close/read/write/... APIs. You should be
aware that Win32 provides functions with the same name which do not
have POSIX semantics. Simple file operations will be fine, but you
will not be able to, for example, open /dev/* or other special files,
and select, locking and other POSIX features will not work the same
way.
To get more reliable semantics, we suggest you use a portability
library such as Gnulib, glib2, QtCore, etc.
If you are using read/write on sockets, then this won't work on
Windows. You should use recv/send instead.
Program uses: connect
Program uses Berkeley sockets API. Windows has a reasonable facsimile
called Winsock. However it has some annoying API differences, in
particular: (1) You have to use WSAGetLastError instead of errno,
(2) error numbers have different names, (3) you cannot select on,
sockets, (4) a multitude of small API differences, (5) you have to
initialize Winsock before using it by calling WSAStartup.
To get more reliable semantics, we suggest you use a portability
library such as Gnulib, glib2, QtCore, etc.
If you are using read/write on sockets, then this won't work on
Windows. You should use recv/send instead.
Program uses: ioctl
Program uses fcntl or ioctl system calls. Only a tiny fraction of
the functionality of these system calls is available in Windows,
often with differences in semantics.
To get more reliable semantics, we suggest you use a portability
library such as Gnulib, glib2, QtCore, etc.
Program uses: nanosleep
usleep/nanosleep system calls do not exist on Windows. You should
replace this with one of the Win32 equivalents such as Sleep.
To get more reliable semantics, we suggest you use a portability
library such as Gnulib, glib2, QtCore, etc.
Program uses: open
Program uses POSIX open/close/read/write/... APIs. You should be
aware that Win32 provides functions with the same name which do not
have POSIX semantics. Simple file operations will be fine, but you
will not be able to, for example, open /dev/* or other special files,
and select, locking and other POSIX features will not work the same
way.
To get more reliable semantics, we suggest you use a portability
library such as Gnulib, glib2, QtCore, etc.
If you are using read/write on sockets, then this won't work on
Windows. You should use recv/send instead.
Program uses: read
Program uses POSIX open/close/read/write/... APIs. You should be
aware that Win32 provides functions with the same name which do not
have POSIX semantics. Simple file operations will be fine, but you
will not be able to, for example, open /dev/* or other special files,
and select, locking and other POSIX features will not work the same
way.
To get more reliable semantics, we suggest you use a portability
library such as Gnulib, glib2, QtCore, etc.
If you are using read/write on sockets, then this won't work on
Windows. You should use recv/send instead.
Program uses: socket
Program uses Berkeley sockets API. Windows has a reasonable facsimile
called Winsock. However it has some annoying API differences, in
particular: (1) You have to use WSAGetLastError instead of errno,
(2) error numbers have different names, (3) you cannot select on,
sockets, (4) a multitude of small API differences, (5) you have to
initialize Winsock before using it by calling WSAStartup.
To get more reliable semantics, we suggest you use a portability
library such as Gnulib, glib2, QtCore, etc.
If you are using read/write on sockets, then this won't work on
Windows. You should use recv/send instead.
Appendix - Full list of unresolved symbols
* = Symbol we were not able to give advice about. If you know
more about this symbol, consider providing a patch for the
CrossReport program.
? = Win32 should supply this symbol, or it can be ignored because
it is a side-effect of the Unix toolchain.
* Array::get(int, Object*)
* Dict::add(char*, Object*)
* Dict::lookup(char*, Object*)
* EmbedStream::EmbedStream(Stream*, Object*, int, unsigned int)
* Function::parse(Object*)
* GfxAxialShading::getColor(double, GfxColor*)
* GfxColorSpace::parse(Object*)
* GfxDeviceCMYKColorSpace::GfxDeviceCMYKColorSpace()
* GfxDeviceGrayColorSpace::GfxDeviceGrayColorSpace()
* GfxDeviceRGBColorSpace::GfxDeviceRGBColorSpace()
* GfxFont::incRefCnt()
* GfxFunctionShading::getColor(double, double, GfxColor*)
* GfxGouraudTriangleShading::getTriangle(int, double*, double*, GfxColor*, double*, double*, GfxColor*, double*, double*, GfxColor*)
* GfxImageColorMap::GfxImageColorMap(int, Object*, GfxColorSpace*)
* GfxImageColorMap::getGrayLine(unsigned char*, unsigned char*, int)
* GfxImageColorMap::getRGBLine(unsigned char*, unsigned int*, int)
* GfxImageColorMap::~GfxImageColorMap()
* GfxPath::GfxPath(int, double, double, GfxSubpath**, int, int)
* GfxPath::close()
* GfxPath::curveTo(double, double, double, double, double, double)
* GfxPath::lineTo(double, double)
* GfxPath::moveTo(double, double)
* GfxPath::~GfxPath()
* GfxRadialShading::getColor(double, GfxColor*)
* GfxResources::GfxResources(XRef*, Dict*, GfxResources*)
* GfxResources::lookupColorSpace(char*, Object*)
* GfxResources::lookupFont(char*)
* GfxResources::lookupGState(char*, Object*)
* GfxResources::lookupPattern(char*)
* GfxResources::lookupShading(char*)
* GfxResources::lookupXObject(char*, Object*)
* GfxResources::lookupXObjectNF(char*, Object*)
* GfxResources::~GfxResources()
* GfxState::GfxState(double, double, PDFRectangle*, int, int)
* GfxState::clearPath()
* GfxState::clip()
* GfxState::clipToStrokePath()
* GfxState::concatCTM(double, double, double, double, double, double)
* GfxState::parseBlendMode(Object*, GfxBlendMode*)
* GfxState::restore()
* GfxState::save()
* GfxState::setFillColorSpace(GfxColorSpace*)
* GfxState::setFillPattern(GfxPattern*)
* GfxState::setFont(GfxFont*, double)
* GfxState::setLineDash(double*, int, double)
* GfxState::setPath(GfxPath*)
* GfxState::setStrokeColorSpace(GfxColorSpace*)
* GfxState::setStrokePattern(GfxPattern*)
* GfxState::setTransfer(Function**)
* GfxState::shift(double, double)
* GfxState::textShift(double, double)
* GfxState::~GfxState()
* Glib::spawn_async_with_pipes(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, Glib::ArrayHandle<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Glib::Container_Helpers::TypeTraits<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, Glib::SpawnFlags, sigc::slot<void, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil> const&, int*, int*, int*, int*)
* Glib::spawn_close_pid(int)
* Glib::ustring::append(char const*, unsigned long)
* Glib::ustring::append(unsigned long, char)
* Glib::ustring::at(unsigned long) const
* Glib::ustring::erase(unsigned long, unsigned long)
* Glib::ustring::find(Glib::ustring const&, unsigned long) const
* Glib::ustring::find(char const*, unsigned long) const
* Glib::ustring::find(char, unsigned long) const
* Glib::ustring::insert(unsigned long, Glib::ustring const&)
* Glib::ustring::insert(unsigned long, char const*)
* Glib::ustring::operator[](unsigned long) const
* Glib::ustring::rfind(char, unsigned long) const
* Glib::ustring::ustring(Glib::ustring const&, unsigned long, unsigned long)
* Glib::ustring::ustring(char const*, unsigned long)
* GlobalParams::GlobalParams()
* GlobalParams::getUnicodeMap(GooString*)
* GooString::GooString(char const*)
* GooString::~GooString()
* Gtk::Box_Helpers::BoxList::operator[](unsigned long) const
* Gtk::HandleBox::on_child_attached(Gtk::Widget*)
* Gtk::Menu_Helpers::MenuList::operator[](unsigned long) const
* ImageStream::ImageStream(Stream*, int, int, int)
* ImageStream::getLine()
* ImageStream::reset()
* ImageStream::~ImageStream()
* Lexer::Lexer(XRef*, Object*)
* Object::fetch(XRef*, Object*)
* Object::free()
* Object::getTypeName()
* Object::initDict(XRef*)
* Object::print(_IO_FILE*)
* PDFDoc::PDFDoc(GooString*, GooString*, GooString*, void*)
* PDFDoc::~PDFDoc()
* Page::loadThumb(unsigned char**, int*, int*, int*)
* Parser::Parser(XRef*, Lexer*, int)
* Parser::getObj(Object*, unsigned char*, CryptAlgorithm, int, int, int)
* Parser::~Parser()
* PyCFunction_NewEx
* PyCObject_AsVoidPtr
* PyCObject_FromVoidPtr
* PyDict_New
* PyErr_Fetch
* PyErr_NewException
* PyErr_Occurred
* PyErr_SetObject
* PyErr_SetString
* PyImport_AddModule
* PyList_Append
* PyList_New
* PyList_SetItem
* PyMapping_Check
* PyMapping_HasKey
* PyMapping_SetItemString
* PyMapping_Size
* PyModule_GetDict
* PyObject_GetItem
* PyObject_SetItem
* PyObject_Str
* PyRun_StringFlags
* PySequence_Check
* PySequence_GetItem
* PySequence_SetItem
* PySequence_Size
* PyString_AsString
* PyString_FromString
* PyString_FromStringAndSize
* PyString_Size
* PyTuple_New
* PyTuple_SetItem
* PyType_IsSubtype
* Py_Finalize
* Py_InitModule4_64
* Py_Initialize
* Stream::addFilters(Object*)
* UnicodeMap::incRefCnt()
* UnicodeMap::mapUnicode(unsigned int, char*, int)
* XFree
* XGetWindowAttributes
* XGetWindowProperty
* XInternAtom
* XListProperties
* _IO_getc
* _IO_putc
* _Unwind_Resume
* __assert_fail
* __cxa_allocate_exception
* __cxa_atexit
* __cxa_bad_cast
* __cxa_bad_typeid
* __cxa_begin_catch
* __cxa_call_unexpected
* __cxa_end_catch
* __cxa_free_exception
* __cxa_get_exception_ptr
* __cxa_guard_abort
* __cxa_guard_acquire
* __cxa_guard_release
* __cxa_pure_virtual
* __cxa_rethrow
* __cxa_throw
* __divdc3
* __dynamic_cast
* __errno_location
* __fprintf_chk
* __fxstat
* __gxx_personality_v0
* __isinf
* __isnan
? __libc_start_main
* __memcpy_chk
* __muldc3
* __powidf2
* __printf_chk
* __snprintf_chk
* __sprintf_chk
__stack_chk_fail
* __strncpy_chk
* __vfprintf_chk
* __vsnprintf_chk
* __xstat
* _cmsChannelsOf
* _setjmp
* abort
* acos
* asin
* atan
* atan2
* cabs
* cairo_ft_font_face_create_for_pattern
* calloc
* ceil
* ceilf
* clock
* clog
close
* cmsCloseProfile
* cmsCreateProofingTransform
* cmsCreateTransform
* cmsCreate_sRGBProfile
* cmsDeleteTransform
* cmsDoTransform
* cmsErrorAction
* cmsGetColorSpace
* cmsGetDeviceClass
* cmsOpenProfileFromFile
* cmsOpenProfileFromMem
* cmsSetAlarmCodes
* cmsSetErrorHandler
* cmsTakeProductDesc
connect
* copyString
* cos
* ctime
* error(int, char*, ...)
* exit
* exp
* fclose
* feof
* ferror
* fflush
* fgetc
* fgets
* fileno
* floor
* floorf
* fmod
* fopen
? fputc
* fputs
* fread
? free
* fseek
? fwrite
* g_dir_open
* g_dir_read_name
* g_file_test
* g_filename_from_uri
* g_filename_from_utf8
* g_filename_to_uri
* g_filename_to_utf8
* g_get_current_dir
* g_get_home_dir
* g_getenv
* gdk_pixbuf_new_from_file
* gdk_pixbuf_save
* gdk_x11_display_get_xdisplay
* gdk_x11_drawable_get_xid
* gdk_x11_get_xatom_name
* gdk_x11_lookup_xdisplay
* gdk_x11_screen_get_xscreen
* getcwd
* getenv
* gethostbyname
* gfree
* gmallocn
* gmtime
* gnome_vfs_close
* gnome_vfs_create
* gnome_vfs_init
* gnome_vfs_initialized
* gnome_vfs_open
* gnome_vfs_read
* gnome_vfs_result_to_string
* gnome_vfs_uri_extract_short_name
* gnome_vfs_uri_extract_short_path_name
* gnome_vfs_uri_is_local
* gnome_vfs_uri_new
* gnome_vfs_write
* gtk_file_chooser_get_filename
* gtk_file_chooser_set_filename
* gtk_window_set_default_icon_from_file
* gtkspell_new_attach
* hypot
ioctl
* isalnum
* isprint
* isspace
* ldexp
* localtime
* log
* log10
* mallinfo
? malloc
* memchr
* memcpy
* memmove
* memset
* mkdir
* modf
nanosleep
open
* operator new(unsigned long)
* operator new(unsigned long, std::nothrow_t const&)
* operator new[](unsigned long)
* pclose
* popen
* poptHelpOptions
* pthread_create
* pthread_self
* putchar
* puts
* qsort
* rand
read
* realloc
* recv
* remove
* rename
* rint
* round
* send
* setlocale
* signal
* sin
* sincos
socket
* sqrt
* sqrtf
* sscanf
* std::_List_node_base::hook(std::_List_node_base*)
* std::_List_node_base::swap(std::_List_node_base&, std::_List_node_base&)
* std::_List_node_base::transfer(std::_List_node_base*, std::_List_node_base*)
* std::_List_node_base::unhook()
* std::_Rb_tree_decrement(std::_Rb_tree_node_base const*)
* std::_Rb_tree_decrement(std::_Rb_tree_node_base*)
* std::_Rb_tree_increment(std::_Rb_tree_node_base const*)
* std::_Rb_tree_increment(std::_Rb_tree_node_base*)
* std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)
* std::_Rb_tree_rebalance_for_erase(std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)
* std::__basic_file<char>::is_open() const
* std::__basic_file<char>::~__basic_file()
* std::__throw_bad_alloc()
* std::__throw_bad_cast()
* std::__throw_length_error(char const*)
* std::__throw_logic_error(char const*)
* std::__throw_out_of_range(char const*)
* std::bad_alloc::~bad_alloc()
* std::basic_filebuf<char, std::char_traits<char> >::basic_filebuf()
* std::basic_filebuf<char, std::char_traits<char> >::close()
* std::basic_filebuf<char, std::char_traits<char> >::open(char const*, std::_Ios_Openmode)
* std::basic_filebuf<char, std::char_traits<char> >::~basic_filebuf()
* std::basic_ifstream<char, std::char_traits<char> >::~basic_ifstream()
* std::basic_ios<char, std::char_traits<char> >::clear(std::_Ios_Iostate)
* std::basic_ios<char, std::char_traits<char> >::imbue(std::locale const&)
* std::basic_ios<char, std::char_traits<char> >::init(std::basic_streambuf<char, std::char_traits<char> >*)
* std::basic_ios<char, std::char_traits<char> >::setstate(std::_Ios_Iostate)
* std::basic_ios<char, std::char_traits<char> >::widen(char) const
* std::basic_ios<char, std::char_traits<char> >::~basic_ios()
* std::basic_ios<wchar_t, std::char_traits<wchar_t> >::imbue(std::locale const&)
* std::basic_ios<wchar_t, std::char_traits<wchar_t> >::init(std::basic_streambuf<wchar_t, std::char_traits<wchar_t> >*)
* std::basic_ios<wchar_t, std::char_traits<wchar_t> >::~basic_ios()
* std::basic_iostream<char, std::char_traits<char> >::~basic_iostream()
* std::basic_istream<char, std::char_traits<char> >& std::basic_istream<char, std::char_traits<char> >::_M_extract<double>(double&)
* std::basic_istream<char, std::char_traits<char> >::get()
* std::basic_istream<char, std::char_traits<char> >::read(char*, long)
* std::basic_istream<char, std::char_traits<char> >::seekg(long, std::_Ios_Seekdir)
* std::basic_istringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_istringstream()
* std::basic_ofstream<char, std::char_traits<char> >::~basic_ofstream()
* std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)
* std::basic_ostream<char, std::char_traits<char> >& std::basic_ostream<char, std::char_traits<char> >::_M_insert<double>(double)
* std::basic_ostream<char, std::char_traits<char> >& std::basic_ostream<char, std::char_traits<char> >::_M_insert<long>(long)
* std::basic_ostream<char, std::char_traits<char> >& std::basic_ostream<char, std::char_traits<char> >::_M_insert<unsigned long>(unsigned long)
* std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
* std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
* std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)
* std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char)
* std::basic_ostream<char, std::char_traits<char> >::flush()
* std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
* std::basic_ostream<char, std::char_traits<char> >::put(char)
* std::basic_ostream<char, std::char_traits<char> >::write(char const*, long)
* std::basic_ostream<char, std::char_traits<char> >::~basic_ostream()
* std::basic_ostream<char, std::char_traits<char> >::~basic_ostream()
* std::basic_ostream<wchar_t, std::char_traits<wchar_t> >& std::basic_ostream<wchar_t, std::char_traits<wchar_t> >::_M_insert<unsigned long>(unsigned long)
* std::basic_ostream<wchar_t, std::char_traits<wchar_t> >::operator<<(int)
* std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::basic_ostringstream(std::_Ios_Openmode)
* std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::str() const
* std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_ostringstream()
* std::basic_ostringstream<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::~basic_ostringstream()
* std::basic_streambuf<char, std::char_traits<char> >::imbue(std::locale const&)
* std::basic_streambuf<char, std::char_traits<char> >::setbuf(char*, long)
* std::basic_streambuf<char, std::char_traits<char> >::showmanyc()
* std::basic_streambuf<char, std::char_traits<char> >::sputc(char)
* std::basic_streambuf<char, std::char_traits<char> >::sync()
* std::basic_streambuf<char, std::char_traits<char> >::uflow()
* std::basic_streambuf<char, std::char_traits<char> >::xsgetn(char*, long)
* std::basic_streambuf<char, std::char_traits<char> >::xsputn(char const*, long)
* std::basic_streambuf<char, std::char_traits<char> >::~basic_streambuf()
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_leak_hard()
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_mutate(unsigned long, unsigned long, unsigned long)
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_M_destroy(std::allocator<char> const&)
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_S_create(unsigned long, unsigned long, std::allocator<char> const&)
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::append(char const*)
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::append(char const*, unsigned long)
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::append(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::append(unsigned long, char)
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::assign(char const*)
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::assign(char const*, unsigned long)
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::assign(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, unsigned long, std::allocator<char> const&)
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long, unsigned long)
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::begin()
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::clear()
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::compare(char const*) const
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::compare(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::end()
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::find(char const*, unsigned long) const
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::find(char const*, unsigned long, unsigned long) const
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::find(char, unsigned long) const
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::find_last_not_of(char, unsigned long) const
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::push_back(char)
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::replace(unsigned long, unsigned long, char const*, unsigned long)
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::reserve(unsigned long)
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::resize(unsigned long, char)
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::rfind(char, unsigned long) const
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::substr(unsigned long, unsigned long) const
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()
* std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()
* std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_Rep::_M_destroy(std::allocator<wchar_t> const&)
* std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_Rep::_S_create(unsigned long, unsigned long, std::allocator<wchar_t> const&)
* std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::assign(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&)
* std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::assign(wchar_t const*, unsigned long)
* std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::~basic_string()
* std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::_M_sync(char*, unsigned long, unsigned long)
* std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::str() const
* std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::str(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
* std::basic_stringbuf<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::_M_sync(wchar_t*, unsigned long, unsigned long)
* std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::~basic_stringstream()
* std::ctype<char> const& std::use_facet<std::ctype<char> >(std::locale const&)
* std::domain_error::domain_error(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
* std::exception::what() const
* std::exception::~exception()
* std::exception::~exception()
* std::ios_base::Init::Init()
* std::ios_base::Init::~Init()
* std::ios_base::ios_base()
* std::ios_base::~ios_base()
* std::locale::classic()
* std::locale::locale()
* std::locale::locale(char const*)
* std::locale::locale(std::locale const&)
* std::locale::operator=(std::locale const&)
* std::locale::~locale()
* std::logic_error::what() const
* std::logic_error::~logic_error()
* std::runtime_error::runtime_error(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
* std::runtime_error::what() const
* std::runtime_error::~runtime_error()
* std::runtime_error::~runtime_error()
* std::terminate()
? strcasecmp
? strchr
? strcmp
* strcpy
* strcspn
* strdup
* strerror
* strftime
* strlen
* strncmp
* strncpy
* strpbrk
* strrchr
* strspn
* strstr
* strtod
? strtol
* strtoll
* strtoul
* system
* tan
* time
* tmpfile
* tolower
* trunc
* unlink
* virtual thunk to std::basic_ostream<char, std::char_traits<char> >::~basic_ostream()
* virtual thunk to std::basic_ostream<char, std::char_traits<char> >::~basic_ostream()
* wmemcpy
More information about the mingw
mailing list