C++の組込みマクロのassert()が使えない
こんにちは。
CygwinでC++開発を行っているのですが、C++の関数型マクロであるassert()が使えなくて困っています。
main関数を含むソースファイルに、
#include assert.h
を記述しておけば使えるはずなのですが、そのソースファイルから実行ファイルを、
g++コマンドでビルドしようとすると、以下のようなエラーが出ます。
------------------------------------------------------------
$ g++ test03-STLの使用.cpp
/cygdrive/c/Users/Kei/AppData/Local/Temp/cckwDP4e.o:test03-STLの使用.cpp:(.text+0x904): undefined reference to `___assert_func'
collect2: ld はステータス 1 で終了しました
------------------------------------------------------------
test03-STLの使用.cpp のmain関数は、以下の通りです。
------------------------------------------------------------
int main()
{
string s="ABC DEF\nGH\tIJ";
reverse(s.begin(), s.end() );
assert(s=="JI\tHG\nFED CBA");
cout<<s
return 0;
}
------------------------------------------------------------
ちなみに、実際にインクルードされる
/usr/include/assert.h
の内容は以下のようになっていました。
------------------------------------------------------------
/*
assert.h
*/
#ifdef __cplusplus
extern "C" {
#endif
#include "_ansi.h"
#undef assert
#ifdef NDEBUG /* required by ANSI standard */
# define assert(__e) ((void)0)
#else
# define assert(__e) ((__e) ? (void)0 : __assert_func (__FILE__, __LINE__, \
__ASSERT_FUNC, #__e))
# ifndef __ASSERT_FUNC
/* Use g++'s demangled names in C++. */
# if defined __cplusplus && defined __GNUC__
# define __ASSERT_FUNC __PRETTY_FUNCTION__
/* C99 requires the use of __func__. */
# elif __STDC_VERSION__ >= 199901L
# define __ASSERT_FUNC __func__
/* Older versions of gcc don't have __func__ but can use __FUNCTION__. */
# elif __GNUC__ >= 2
# define __ASSERT_FUNC __FUNCTION__
/* failed to detect __func__ support. */
# else
# define __ASSERT_FUNC ((char *) 0)
# endif
# endif /* !__ASSERT_FUNC */
#endif /* !NDEBUG */
void _EXFUN(__assert, (const char *, int, const char *)
_ATTRIBUTE ((__noreturn__)));
void _EXFUN(__assert_func, (const char *, int, const char *, const char *)
_ATTRIBUTE ((__noreturn__)));
#ifdef __cplusplus
}
#endif
------------------------------------------------------------
Borland C++ Compilerのbcc32コマンドでは、先ほどのソースファイルから実行ファイルをビルドすることができたので、何が問題なのかが分かりません。
以上の件について何かご存知の方がいらっしゃれば、是非教えて頂きたいと思います。
では、よろしくお願い致します。