Я борюсь с проблемой, связывая мой код с 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?
Это часто задаваемые вопросы, не связанные с вашей версией GCC.
Я не думаю, что ваша компиляция удалась с gcc-4.3
Порядок аргументов gcc
имеет большое значение (см., например, этот); объектные файлы и библиотеки должны идти последними (от высокоуровневых до низкоуровневых). Попробуй с
gcc -Wall -g test.c -lmagic -o mytest
Кстати, не называйте свой исполняемый файл test
(но, например, mytest
) поскольку test
часто встроен в оболочку.