Проблема с подключением к библиотеке gobject-introspection - PullRequest
0 голосов
/ 21 февраля 2012

У меня есть файл blah.c, содержащий:

#include <gobject-introspection-1.0/girepository.h>

int main(int argc,char **argv) {
    GIRepository *gir = g_irepository_get_default();
    return 0;
}

Это, конечно, проще, чем файл, который я хочу скомпилировать, но с той же проблемой.Я компилирую с

gcc `pkg-config --cflags --libs gobject-introspection-1.0` blah.c

и получаю ошибку компоновки:

/tmp/cck88oj4.o: In function `main':
blah.c:(.text+0x10): undefined reference to `g_irepository_get_default'
collect2: ld returned 1 exit status

Команда pkg-config возвращает

-pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gobject-introspection-1.0  -Wl,--export-dynamic -pthread -lgirepository-1.0 -lgobject-2.0 -lgmodule-2.0 -lffi -lgthread-2.0 -lrt -lglib-2.0

и файлы libgirepository-1.0.aи libgirepository-1.0.so оба присутствуют в /usr/lib.

Что вызывает эту ошибку компоновки?

1 Ответ

2 голосов
/ 21 февраля 2012

Причиной ошибки компоновки может быть то, что компоновщик связывается с опцией -Wl, as-needed по умолчанию. Когда используется эта опция, библиотеки не связаны, пока не встретится символ в библиотеке. В вашем текущем случае, когда исходный файл добавляется в конце, ни один из символов в библиотеках не встречается, поэтому связывание не выполняется. Вы можете попробовать:

gcc blah.c `pkg-config --cflags --libs gobject-introspection-1.0` 

или

gcc -Wl,-no-as-needed `pkg-config --cflags --libs gobject-introspection-1.0` blah.c

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...