【发布时间】:2018-03-16 01:59:30
【问题描述】:
我是使用 DBUS 的新手,想编译一个使用 glib-2.0 的程序。
但是我得到一个错误。这是我调用 make 的输出:
g++ -I. -Wall -std=c++11 main.c `pkg-config --cflags --libs glib-2.0 dbus-1
dbus-glib-1` -o main.o
main.c: In function ‘int main(int, char**)’:
main.c:12:15: warning: variable ‘client’ set but not used [-Wunused-but-set-variable]
GDBusClient *client;
^
/tmp/ccNkl0Zc.o: In function `main':
main.c:(.text+0x20): undefined reference to `g_dbus_setup_bus'
main.c:(.text+0x44): undefined reference to `g_dbus_client_new'
collect2: error: ld returned 1 exit status
makefile:9: recipe for target 'main.o' failed
make: *** [main.o] 错误 1
我尝试按照 gnome.org https://developer.gnome.org/glib/stable/glib-compiling.html 上的说明进行操作
这是我的制作文件:
CC=g++
CFLAGS=-I. -Wall -std=c++11 \
-I/usr/include/dbus-1.0 \
-I/usr/lib/arm-linux-gnueabihf/dbus-1.0/include/ \
-I/usr/lib/arm-linux-gnueabihf/glib-2.0/include \
-I/usr/include/glib-2.0
OBJ = main.o
default: program
main.o: main.c hello.h
$(CC) $(CFLAGS) main.c `pkg-config --cflags --libs glib-2.0` -o main.o
program: $(OBJ)
$(CC) $(OBJ) $(CFLAGS) -o program
clean:
-rm -f main.o
-rm -f program
这是我的主要内容:
#include <cstddef>
#include <cstdio>
#include <iostream>
#include <glib.h>
#include <dbus/dbus.h>
#include <gdbus/gdbus.h>
static DBusConnection *dbus_conn;
int main(int argc, char * argv[]){
GDBusClient *client;
dbus_conn = g_dbus_setup_bus(DBUS_BUS_SYSTEM, NULL, NULL);
client = g_dbus_client_new(dbus_conn, "org.bluez", "/org/bluez");
return 0;
}
为什么我会收到对这些调用的未定义引用?
【问题讨论】:
-
当您使用
pkg-config时,为什么还要在CLFAGS中硬编码-I? -
我最初没有使用
pkg-config,所以我从未更改过我的CFLAGS我不认为这是导致问题的原因。 -
也许不是,但如果
pkg-config返回的路径不一样,也不是那么正确。错误信息是什么?是抱怨未定义的引用还是抱怨找不到.so文件? -
它似乎没有抱怨 .so 文件。我添加了终端输出的图像。我还将`CFLAGS`更改为:
CFLAGS=I. -Wall -std=c+11。仍然出现同样的错误。 -
请不要张贴输出的图片,复制并粘贴到您的问题中。我无法从图片中进行文本选择。从我看到的快速谷歌搜索来看,人们也在
pkg-config行中使用dbus-1 dbus-glib-1。尝试添加这两个。