我正在尝试从 C 代码中调用八度函数,但问题是当在八度中运行此命令时mkoctfile --mex addition_GUI.c
会出现错误addition_GUI.c:1:20: fatal error: gtk/gtk.h: No such file or directory compilation terminated.
#include<gtk/gtk.h>
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
mxArray *in[2], *out[1];
in[0] = mxCreateDoubleScalar(1);
in[1] = mxCreateDoubleScalar(2);
mexCallMATLAB(1, out, 2, in, "addition");
mexCallMATLAB(0, NULL, 1, out, "disp");
mxDestroyArray(in[0]);
mxDestroyArray(in[1]);
mxDestroyArray(out[0]);
}
void static call(GtkWidget *widget,gpointer data)
{
g_print("\n%s\n",gtk_entry_get_text(GTK_ENTRY(data)));
gint a=3;
gint b=2;
gint x;
x=a+b;
char y[4];
sprintf(y, "%d", x);
gtk_entry_set_text(GTK_ENTRY(data),y);
}
int main(int agrc, char *agrv[])
{
gtk_init(&agrc,&agrv);
GtkWidget *entry,*window,*button,*hbox;
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(window,"delete-event",G_CALLBACK(gtk_main_quit),NULL);
hbox=gtk_hbox_new(0,0);
gtk_container_add(GTK_CONTAINER(window),hbox);
button=gtk_button_new_with_mnemonic("ADD");
entry=gtk_entry_new();
const char* sum="3+2";
gtk_entry_set_text(GTK_ENTRY(entry),sum);
g_signal_connect(button,"clicked",G_CALLBACK(call),entry);
g_signal_connect(entry,"activate",G_CALLBACK(call),entry);
gtk_box_pack_start(GTK_BOX(hbox),button,0,0,0);
gtk_box_pack_start(GTK_BOX(hbox),entry,0,0,0);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
答案1
您是否尝试过在命令行上添加必要的 gtk+ 标头搜索路径mkoctfile
?
OPTIONS
mkoctfile accepts the following options:
-IDIR Add include directory DIR to compile commands.
您应该能够使用该pkg-config
实用程序自动包含所有头文件目录,例如
mkoctfile `pkg-config --cflags-only-I gtk+-2.0` --mex addition_GUI.c
或者你可以运行
pkg-config --cflags-only-I gtk+-2.0
在命令行上,然后手动将其输出的包含路径复制到您的 mkoctfile 命令。您将需要软件包pkg-config
以及 gtk+-2.0 的开发文件和标头,即libgtk2.0-dev
安装在您系统上的软件包。
为了创建可运行的 mex 可执行文件,您可能需要使用 mkoctfile 选项添加相应的库-L
- 或者通过添加--libs
到命令中pkg-config
,即
mkoctfile `pkg-config --cflags-only-I --libs gtk+-2.0` --mex addition_GUI.c
或(手动添加库)
pkg-config --libs gtk+-2.0