これはまったく関係のない、または非常に単純な質問かもしれません。
libz
ライブラリ関数を使用して圧縮を行う非常に単純なアプリケーションを作成しようとしています。CPUuCLinux
上の環境で実行する必要があります。NIOS
私のシステムはbusyboxを実行しており、busyboxはすべての通常gzip
のgunzip
機能を提供します。しかし、それらはビジーボックスに組み込まれており、動的 libz
ライブラリを使用していないことがわかります。コードは次のとおりです。
{
printf("Hello World\n");
printf("Zlib: %s\n", zlibVersion());
gzFile file = gzopen ("/tmp/s2.log.gz", "wb");
if (! file) {
fprintf (stderr, "gzopen failed: %s.\n", strerror (errno));
exit (-1);
}
printf("%d\n", __LINE__);
{
unsigned char buffer[LENGTH] = "Hello world";
int bytes_read = gzwrite (file, buffer, LENGTH - 1);
if (bytes_read < LENGTH - 1) {
int err;
const char * error_string;
error_string = gzerror (file, & err);
if (err) {
fprintf (stderr, "Error: %s.\n", error_string);
exit (-1);
}
}
}
printf("%d\n", __LINE__);
printf("%d\n", gzclose (file));
return 0;
}
zlib exampleから部分的に持ち上げられています。問題は、最後の行でgzclose
、圧縮されたバッファが実際にファイルにフラッシュされたときにillegal instruction
例外が発生することです。なぜそれが起こっているのか誰にも分かりますか?
障害の GDB からのバックトレースは次のとおりです。
#0 0x2aad9efc in order.3344 () from ./uClinux/uClinux-dist/staging/usr/lib/libz.so.1
#1 0x2aad21c8 in _tr_flush_block () from ./uClinux/uClinux-dist/staging/usr/lib/libz.so.1
#2 0x2aace694 in deflate_slow () from ./uClinux/uClinux-dist/staging/usr/lib/libz.so.1
#3 0x2aacec9c in deflate () from ./uClinux/uClinux-dist/staging/usr/lib/libz.so.1
#4 0x2aacb5d0 in gzclose () from ./uClinux/uClinux-dist/staging/usr/lib/libz.so.1
#5 0x0000193c in main () at main.c:49
更新: を静的にリンクしましたlibz.a
が、同じエラーが発生しました。