Сбой GCC 4.8 при соединении с libmagic

Я борюсь с проблемой, связывая мой код с libmagic:

test.c:(.text+0x16): undefined reference to `magic_open'
test.c:(.text+0x50): undefined reference to `magic_load'
test.c:(.text+0x60): undefined reference to `magic_error'
test.c:(.text+0x84): undefined reference to `magic_close'
test.c:(.text+0x9e): undefined reference to `magic_file'
test.c:(.text+0xba): undefined reference to `magic_close'
collect2: ld returned 1 exit status

Однако проблема возникает только при версии gcc> 4.4. Для компиляции я использую следующую команду:

gcc -L/usr/lib/ -lmagic  test.c -o test

Пример кода, который использует libmagic, может быть найден здесь. Я проверил, и эта проблема также появляется. Очевидно, что libmagic и libmagic-dev установлены в моей системе (Ubuntu 14.04).

Есть ли способ решения этой проблемы, кроме понижения версии GCC?

1 ответ

Решение

Это часто задаваемые вопросы, не связанные с вашей версией GCC.

Я не думаю, что ваша компиляция удалась сgcc-4.3

Порядок аргументов gcc имеет большое значение (см., например, это); объектные файлы и библиотеки должны идти последними (от высокоуровневых до низкоуровневых). Попробуй с

 gcc  -Wall -g test.c -lmagic  -o mytest

Кстати, не называйте свой исполняемый файл test (но например mytest) поскольку test часто встроен в оболочку.

Другие вопросы по тегам