Как связать библиотеку glib-2.0 для программы c / c ++ для компиляции

Я новичок в использовании 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

Это мой make-файл:

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.0OBJ = 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 programclean:
-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;
}

Почему я получаю неопределенную ссылку на эти звонки?

1

Решение

Пришлось немного упростить это для моей системы, но это работает для меня:

main.o: main.c
$(CC) $(CFLAGS) main.c `pkg-config --cflags glib-2.0` -c -o main.o

program: $(OBJ)
$(CC) $(OBJ) $(CFLAGS) `pkg-config --libs glib-2.0` -o program

Первое изменение в вашем поколении main.o, У вас не было -c флаг, так main.o это полная программа.

Второе изменение — использовать только флаги при компиляции и использовать флаги при линковке. У меня есть библиотека Glib, когда я бегу ldd:

ldd program
linux-vdso.so.1 (0x00007ffd489ae000)
libglib-2.0.so.0 => /usr/lib64/libglib-2.0.so.0 (0x00007fc29cf4a000)
libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/7.3. /libstdc++.so.6 (0x00007fc29cb45000)
libm.so.6 => /lib64/libm.so.6 (0x00007fc29c83d000)
libgcc_s.so.1 => /usr/lib/gcc/x86_64-pc-linux-gnu/7.3.0/libgcc_s.so.1 (0x00007fc29c626000)
libc.so.6 => /lib64/libc.so.6 (0x00007fc29c277000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007fc29c005000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc29bde5000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc29d25d000) [/tmp/glib] pkg-config --libs glib-2.0
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]