Не удалось загрузить разделяемую библиотеку pppd - неопределенный символ g_string_sized_new

Я скомпилировал разделяемую библиотеку (плагин pppd) без ошибок и предупреждений, но когда pppd пытается загрузить этот плагин, он завершается неудачно с сообщением "undefined symbol g_string_sized_new".

Источник плагина можно найти здесь: https://raw.github.com/openshine/ModemManager/master/test/mm-test-pppd-plugin.c

Для компиляции разделяемой библиотеки я использую следующие команды:

gcc -fPIC -c ./mm-test-pppd-plugin.c -o mm-test-pppd-plugin.o `pkg-config --cflags --libs glib-2.0`
gcc -shared -o ./mm-test-pppd-plugin.so ./mm-test-pppd-plugin.o

Как я считаю, этот g_string_sized_new должен быть в GLib. Так как я понимаю, это должно быть доступно для всей системы?

ОС: Ubuntu 13.04

Есть идеи, что может быть не так? Заранее спасибо!

1 ответ

Решение

Компиляция не является компоновкой, а компоновка не является компиляцией.

В первой строке вы вызываете компилятор, чтобы скомпилировать исходный текст C в объектный код. Здесь подача --libs флаг для pkg-config совершенно лишний, чистый компилятор ничего не может поделать с библиотеками.

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

Короче говоря, прочитайте это.

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