Jac*_*rby 3 c++ glib gtkmm gtk3
我对 Gtk 编程还很陌生。我正在使用 Gtkmm 库为我的应用程序编写一个简单的 GUI。
GUI 是一个更大的应用程序的一部分,它实际上编译成两个单独的可执行文件,但是我认为这无关紧要,因为这个问题只涉及两个可执行文件之一。
无论如何,我在client.cpp中有以下代码:
#include "client.hpp"
int main() {
auto builder = Gtk::Builder::create();
}
Run Code Online (Sandbox Code Playgroud)
在 client.hpp 中,我只包含 iostream、glibmm.h 和各种 gtkmm 小部件头文件,以及 gtkmm/builder.h。
我的 makefile 一团糟,但它是:
CXXFLAGS= -std=c++14 -g
LDFLAGS=-lgmp -pthread $(shell pkg-config -libs gtkmm-3.0)
SERVER_EXE=server
CLIENT_EXE=client
CXX=g++
DIST_DIR=.
BUILD_DIR=./build
SERVER_CXXFLAGS=
CLIENT_CXXFLAGS=$(shell pkg-config --cflags gtkmm-3.0)
INCLUDE_DIRS=./include
INCLUDE_PARAMS=$(foreach d, $(INCLUDE_DIRS), -I$d)
SERVER_OBJECTS=rsa.o server_entry.o server.o
SERVER_OBJECT_PATHS=$(foreach o, $(SERVER_OBJECTS), $(BUILD_DIR)/$o)
CLIENT_OBJECTS=resources.o client.o
CLIENT_OBJECT_PATHS=$(foreach o, $(CLIENT_OBJECTS), $(BUILD_DIR)/$o)
all: $(SERVER_OBJECT_PATHS) $(CLIENT_OBJECT_PATHS)
mkdir -p $(DIST_DIR)
$(CXX) $(CLIENT_OBJECT_PATHS) -o $(DIST_DIR)/$(CLIENT_EXE) $(LDFLAGS)
$(CXX) $(SERVER_OBJECT_PATHS) -o $(DIST_DIR)/$(SERVER_EXE) $(LDFLAGS)
clean:
rm -rf $(BUILD_DIR)
rm $(DIST_DIR)/$(CLIENT_EXE) $(DIST_DIR)/$(SERVER_EXE)
$(BUILD_DIR)/%.o: %.cpp
mkdir -p $(BUILD_DIR)
$(CXX) -c $< $(INCLUDE_PARAMS) -o $@ $(CXXFLAGS) $(SERVER_CXXFLAGS) $(CLIENT_CXXFLAGS)
resources.cpp:
glib-compile-resources --target=resources.cpp --generate-source windows.gresource.xml
Run Code Online (Sandbox Code Playgroud)
我意识到这需要考虑很多,因为它实际上正在构建两个可执行文件,但是对于这个问题,您可以安全地只考虑与客户端程序相关的事情。
底部的规则用于将我制作的空地文件转换为可以链接到我的 client.cpp 文件的 c++ 文件。
无论如何,当我运行我的程序时,我得到以下输出:
(process:16593): GLib-GObject-CRITICAL **: 23:15:27.886: g_object_set_qdata_full: assertion 'quark > 0' failed
Run Code Online (Sandbox Code Playgroud)
我完全不知道这个错误消息可能意味着什么。由于我对这个库不是很有经验,所以我不太确定该怎么做。我还尝试在我的代码后添加一行以从资源加载构建器小部件,但这会产生更严重的错误和段错误。我希望如果我能解决第一个错误,其他一切都会水到渠成。有什么想法吗?谢谢!
更新 1:当我将 client.cpp 的源代码更改为此处提供的源代码时,它运行良好!所以这很奇怪..
我很确定 GLibMM 必须Glib::init()在调用任何 Glib/Gtk 函数之前进行初始化。Gtk::Application::create()会为你做这件事,这就是为什么这个例子有效。
| 归档时间: |
|
| 查看次数: |
1085 次 |
| 最近记录: |