g_socket_new 的 Glib 链接错误
Glib linking error for g_socket_new
我正在尝试为一个网络项目学习 glib 和 gObject。
这里是用来编译的命令(使用pkg-config得到输出后):
gcc socket1.c -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -lgobject-2.0 -lglib-2.0
socket1.c,剥离后,确定问题是:
#include <glib.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <gio/gio.h>
static GSocket *mySocket;
int main(int argc, char **argv) {
GError *err1 = NULL;
mySocket = g_socket_new ( G_SOCKET_FAMILY_IPV4,
G_SOCKET_TYPE_STREAM,
G_SOCKET_PROTOCOL_TCP,
&err1);
}
错误是:
/tmp/ccKIEXOi.o: In function `main':
socket1.c:(.text+0x3d): undefined reference to `g_socket_new'
collect2: error: ld returned 1 exit status
我尝试使用 readelf -Ws 和 nm 看看我是否可以在任何.so 文件 linked。我没有看到任何。我需要 link 访问一个单独的库吗? Where/which是吗?
你需要link到libgio-2.0.so
,这是GLib的第三部分(GLib,GObject,GIO)。您可以使用 pkg-config --cflags --libs gio-2.0
.
从 pkg-config
获取其编译器和 linker 标志
您可以通过查看文档来判断 GSocket
在 GIO 中 — 它在 GIO 手册中:https://developer.gnome.org/gio/stable/GSocket.html。
我正在尝试为一个网络项目学习 glib 和 gObject。
这里是用来编译的命令(使用pkg-config得到输出后):
gcc socket1.c -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -lgobject-2.0 -lglib-2.0
socket1.c,剥离后,确定问题是:
#include <glib.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <gio/gio.h>
static GSocket *mySocket;
int main(int argc, char **argv) {
GError *err1 = NULL;
mySocket = g_socket_new ( G_SOCKET_FAMILY_IPV4,
G_SOCKET_TYPE_STREAM,
G_SOCKET_PROTOCOL_TCP,
&err1);
}
错误是:
/tmp/ccKIEXOi.o: In function `main':
socket1.c:(.text+0x3d): undefined reference to `g_socket_new'
collect2: error: ld returned 1 exit status
我尝试使用 readelf -Ws 和 nm 看看我是否可以在任何.so 文件 linked。我没有看到任何。我需要 link 访问一个单独的库吗? Where/which是吗?
你需要link到libgio-2.0.so
,这是GLib的第三部分(GLib,GObject,GIO)。您可以使用 pkg-config --cflags --libs gio-2.0
.
pkg-config
获取其编译器和 linker 标志
您可以通过查看文档来判断 GSocket
在 GIO 中 — 它在 GIO 手册中:https://developer.gnome.org/gio/stable/GSocket.html。