Не удалось загрузить разделяемую библиотеку 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
с конца командной строки - компоновщик должен знать библиотеки, с которыми нужно связываться, чтобы он мог разрешать символы.