我编译了没有错误或警告的共享库(pppd插件),但是当pppd尝试加载此插件时,它会因“未定义的符号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
任何想法都可能出错?提前谢谢!
答案 0 :(得分:0)
编译不是链接,链接不是编译。
在第一行,您将调用编译器,以便编译您的C源文本到目标代码。向--libs
提供pkg-config
标志是完全多余的,纯编译器无法对库做任何事情。
但是,在第二行,您尝试使用链接器 将生成的对象文件链接到正确的可执行文件中,但现在您缺少< / strong>命令行末尾的pkg-config --libs
- 链接器需要知道要链接的库,以便能够解析符号。