Это может быть совершенно неактуальный или очень простой вопрос.Нелегальная инструкция при использовании zlib в среде uCLinux
Я пытаюсь написать очень простое приложение, которое использует функции библиотеки libz
для сжатия. Он должен работать в среде uCLinux
на процессоре NIOS
. Моя система работает busybox и busybox предоставляет все обычные функции gzip
, gunzip
. Но они встроены в busybox и насколько я могу судить, не используя динамическую библиотеку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
статический, но произошла та же ошибка.
ПРЕДЛОЖЕНИЕ: рассмотрите возможность создания zlib из исходного кода, используя ту же техническую привязку ucLinux, которую вы используете для создания своего приложения. Также рассмотрите возможность создания статического zlib .a и привязки вашего приложения к этому. – paulsm4
Спасибо. Я создаю его из источника, используя ту же самую инструментальную комбинацию uCLinux. Я все еще тестирую статически связанную zlib.s – ilya1725