我已经编译了共享库(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

任何想法可能有什么问题吗?提前致谢!

最佳答案

编译不是链接,链接不是编译。

在第一行中,您正在调用编译器,以便将C源代码编译为目标代码。在这里,将--libs标志提供给pkg-config是完全多余的,纯编译器无法使用库。

但是,在第二行中,您尝试使用链接器将生成的目标文件链接到适当的可执行文件中,但是现在您在命令行末尾缺少了pkg-config --libs-链接器需要知道要使用的库链接以使其能够解析符号。

Long story short, read this.

关于c - 无法加载pppd共享库- undefined symbol g_string_sized_new,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16728791/

10-11 20:52