UNIX から LINUX に pro*c コードを移植しています。コードがコンパイルされ、実行可能ファイルが正常に作成されます。しかし、実行時にセグメンテーション違反が発生します。コードを段階的にデバッグしました。以下は GDB デバッグの出力です。
Breakpoint 4 at 0x3b19690f50
(gdb) n
525 strftime (buf, MAX_STRING_LEN, "%d/%b/%Y:%H:%M:%S", dummy_time);
(gdb) n
Breakpoint 4, 0x0000003b19690f50 in strftime () from /lib64/libc.so.6
(gdb) n
Single stepping until exit from function strftime,
which has no line number information.
0x0000003b19690f70 in strftime_l () from /lib64/libc.so.6
(gdb) n
Single stepping until exit from function strftime_l,
which has no line number information.
Program received signal SIGSEGV, Segmentation fault.
0x0000003b19690f8b in strftime_l () from /lib64/libc.so.6
実際にはコードで関数strftime()
が呼び出されます。しかし、なぜstrftime_l()
/lib64/libc.so.6 に到達するのかわかりません。
この問題は UNIX では発生しません。これについて助けてください。コードは
static void speed_hack_libs(void)
{
time_t dummy_time_t = time(NULL);
struct tm *dummy_time = localtime (&dummy_time_t);
struct tm *other_dummy_time = gmtime (&dummy_time_t);
char buf[MAX_STRING_LEN];
strftime (buf, MAX_STRING_LEN, "%d/%b/%Y:%H:%M:%S", dummy_time);
}