0

gsettingsschema.h ライブラリの関数を使用しようとしている Ubuntu 13.04 を使用しています

これは私の .pro ファイルです

QT+=core
QT-=gui
TARGET=gsettings_test
CONFIG+=console
CONFIG-=app_bundle

CONFIG+=link_pkgconfig
PKGCONFIG+=gio-2.0

TEMPLATE=app

SOURCES+=main.cpp

pkg-config --libs gio-2.0 レポート:

-lgio-2.0 -lgobject-2.0 -lglib-2.0

私にはいいですね。

私のプログラムでは、gio/gio.h と gio/gsettingsschema.h ライブラリの両方を使用しています。コンパイラは gio.h (g_settings_new_full() など) から関数を見つけることができますが、gsettingsschema.h から関数を見つけることはできません。

次のようなエラーが表示されます。

undefined reference to 'g_settings_schema_source_get_default()'

ここで何が起こっているのですか?

EDIT:完全なコンパイル出力(Qt Creatorから報告されたもの):

01:46:09: Running steps for project gsettings_test...
01:46:09: Starting: "/usr/bin/qmake" /home/alex/Qt/gsettings_test/gsettings_test.pro -r -spec linux-g++ CONFIG+=debug CONFIG+=declarative_debug CONFIG+=qml_debug
01:46:09: The process "/usr/bin/qmake" exited normally.
01:46:09: Starting: "/usr/bin/make" 
g++  -o gsettings_test main.o   -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lQt5Core -lpthread 
main.o: In function `gsettings_get(QString, QString)':
/home/alex/Qt/build-gsettings_test-Desktop-Debug/../gsettings_test/main.cpp:17: undefined reference to `g_settings_schema_source_get_default()'
/home/alex/Qt/build-gsettings_test-Desktop-Debug/../gsettings_test/main.cpp:17: undefined reference to `g_settings_schema_source_ref(_GSettingsSchemaSource*)'
/home/alex/Qt/build-gsettings_test-Desktop-Debug/../gsettings_test/main.cpp:19: undefined reference to `g_settings_schema_source_lookup(_GSettingsSchemaSource*, char const*, int)'
collect2: error: ld returned 1 exit status
make: *** [gsettings_test] Error 1
01:46:10: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project gsettings_test (kit: Desktop)
When executing step 'Make'
01:46:10: Elapsed time: 00:01.

Libgio の正確なファイル名:

/usr/lib/i386-linux-gnu/libgio-2.0.so.0.3600.0

役立つコマンド:

alex@MaD-pc:~$ sudo ldconfig -v | grep gio
[sudo] password for alex: 
/sbin/ldconfig.real: Can't stat /lib/i686-linux-gnu: No such file or directory
/sbin/ldconfig.real: Can't stat /usr/lib/i686-linux-gnu: No such file or directory
/sbin/ldconfig.real: Path `/lib/i386-linux-gnu' given more than once
/sbin/ldconfig.real: Path `/usr/lib/i386-linux-gnu' given more than once
    libgiomm-2.4.so.1 -> libgiomm-2.4.so.1.3.0
    libgio-2.0.so.0 -> libgio-2.0.so.0.3600.0
4

1 に答える 1

3

これはかなり時代遅れであることは知っていますが、最近同じ問題が発生し、実際の回答なしでこの質問を見つけ、最終的に解決することができました. したがって、これが同じ問題を抱えている他の人に役立つことを願っています。

この問題は、C と C++ の間の異なる関数名マングリングに関連していたため、C++ コードから GLib ファイルを含めると、undefined referenceエラーが発生します。

解決策は、私のインクルードをから変更することでした

#include <gio/gio.h>
#include <glib.h>

extern "C" {
#include <gio/gio.h>
#include <glib.h>
}

その後、コンパイル (およびリンク!) は問題なく機能しました。

于 2014-11-20T11:51:55.380 に答える