Ошибка компоновщика: неопределенная ссылка на общий объект - PullRequest
1 голос
/ 08 октября 2011

Я пытаюсь использовать внешнюю библиотеку с именем iniparser в моей C-программе.Я использую gcc 4.4.

Я помещаю библиотеку iniparser в подкаталог с именем lib/ Заголовочные файлы находятся в lib / iniparser / src, и библиотека компилируется в lib/iniparser/libiniparser.so.0.

Я написал короткий Makefile для его компиляции, вот результат make:

gcc -Wall -Wextra -Werror -c -I include/ src/smag_main.c -L lib/iniparser -liniparser -I lib/iniparser/src
gcc -Wall -Wextra -Werror -c -I include/ -L lib/iniparser -liniparser -I lib/iniparser/src src/agros.c
gcc -Wall -Wextra -Werror -c -I include/ -L lib/iniparser -liniparser -I lib/iniparser/src src/main.c
gcc -Wall -Wextra -Werror -L lib/iniparser -liniparser -o agros smag_main.o main.o agros.o
smag_main.o: In function `sec_haskey':
smag_main.c:(.text+0xa9): undefined reference to `iniparser_find_entry'
smag_main.o: In function `parse_config':
smag_main.c:(.text+0x153): undefined reference to `iniparser_load'
smag_main.c:(.text+0x18b): undefined reference to `iniparser_getint'
smag_main.c:(.text+0x1c6): undefined reference to `iniparser_getstring'
smag_main.c:(.text+0x202): undefined reference to `iniparser_getstring'
smag_main.c:(.text+0x261): undefined reference to `iniparser_getstring'
smag_main.c:(.text+0x2c2): undefined reference to `iniparser_getint'
smag_main.c:(.text+0x2d5): undefined reference to `iniparser_freedict'
collect2: ld returned 1 exit status
make: *** [agros] Error 1

Первый вызов gcc успешно компилируется smag_main.o, второй компилирует agros.o и третий main.o.4-й вызов - это компоновщик, который свяжет все эти объекты в исполняемый файл agros.Это, очевидно, дает сбой.

Похоже, у него есть проблемы с поиском iniparser.so во время соединения.Как мой звонок не так?
Я в замешательстве.

(Альтернативный вопрос, если кто-нибудь может объяснить, как связать, позвонив ld напрямую, было бы здорово).

1 Ответ

4 голосов
/ 08 октября 2011

Попробуйте поставить символическую ссылку от libiniparser.so.0 до libiniparser.so

 cd lib/iniparser/
 ln -s libiniparser.so.0 libiniparser.so
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...