Попытка включать библиотеку, но продолжать получать 'неопределенную ссылку на' сообщения

Я пытаюсь пользоваться libtommath библиотекой. Я использую NetBeans IDE для своего проекта на Ubuntu Linux. Я загрузил и создал библиотеку, я сделал, 'делают установку' для помещения получающегося.a файла в/usr/lib/и.h файлов в/usr/include

Это, кажется, находит файлы соответственно (так как я больше не получаю те ошибки, которые я сделал прежде, чем установить в/usr каталоги).

Однако, когда я создаю простого основного звонка mp_init (который находится в библиотеке), я получаю следующую ошибку, когда я пытаюсь сделать свой проект:

mkdir -p build/Debug/GNU-Linux-x86
rm -f build/Debug/GNU-Linux-x86/main.o.d
gcc -c -g -MMD -MP -MF build/Debug/GNU-Linux-x86/main.o.d -o build/Debug/GNU-Linux-x86/main.o main.c
mkdir -p dist/Debug/GNU-Linux-x86
gcc -o dist/Debug/GNU-Linux-x86/cproj1 build/Debug/GNU-Linux-x86/main.o
build/Debug/GNU-Linux-x86/main.o: In function 'main':
/home/[[myusername]]/NetBeansProjects/CProj1/main.c:18: undefined reference to `mp_init'
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/GNU-Linux-x86/cproj1] Error 1

Так, похоже, что компоновщик не может найти функцию в библиотеке, однако это там, таким образом, я просто не знаю то, что могло вызывать это.

Я получаю ту же ошибку, если я ввожу команду gcc непосредственно и пропускаю make-файл, я также удостоверился, что статическая библиотека была скомпилирована с gcc также.

Отредактированный для добавления:

Я получаю эти те же ошибки, если я делаю компиляцию непосредственно и добавляю библиотеку с-l или-L:

$ gcc -l /usr/lib/libtommath.a main.c 
/usr/bin/ld: cannot find -l/usr/lib/libtommath.a
collect2: ld returned 1 exit status

$ gcc -llibtommath.a main.c 
/usr/bin/ld: cannot find -llibtommath.a
collect2: ld returned 1 exit status

$ gcc -Llibtommath.a main.c 
/tmp/ccOxzclw.o: In function `main':
main.c:(.text+0x18): undefined reference to `mp_init'
collect2: ld returned 1 exit status

$ gcc -Llibtommath.a main.c 
/tmp/ccOxzclw.o: In function `main':
main.c:(.text+0x18): undefined reference to `mp_init'
collect2: ld returned 1 exit status

Я очень ржав на этом материале, таким образом, я не уверен, что использую правильную команду здесь, в-L примерах находимые библиотеки? Если библиотека не находится, как же я заставляю ее находить библиотеку? Это находится в/usr/lib, я попробовал его.a файлом в текущем каталоге и т.д. Существует ли переменная среды, которую я должен установить? Если так, как, и т.д.

Я попробовал совершенно другую библиотеку (GMP) и имел ту же самую проблему. Это должно быть некоторой проблемой среды Ubuntu? У кого-либо есть какая-либо идея, как зафиксировать это?

58
задан ROMANIA_engineer 20 January 2018 в 00:09
поделиться

1 ответ

Уловка заключается в том, чтобы поместить библиотеку ПОСЛЕ модуля, который вы компилируете. Проблема - эталонная штука. Компоновщик разрешает ссылки по порядку, поэтому, когда библиотека находится ДО компиляции модуля, компоновщик сбивается с толку и не думает, что какие-либо функции в библиотеке необходимы. Помещая библиотеку ПОСЛЕ модуля, ссылки на библиотеку в модуле разрешаются компоновщиком.

137
ответ дан 24 November 2019 в 18:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: