2017-08-06 4 views
1

GTK3で複数のCファイルを持つCプログラムを作ろうとしています。 how-to-split-a-c-program-into-multiple-files この example-0.cGTK3プログラムを複数のソースファイルに入れることはできませんか?

をマイプログラムは次のようになります:

(関数アクティベート付き)Functions.c

#include "Functions.h" 
#include <gtk/gtk.h> 
#include "stdio.h" 

static void activate (GtkApplication* app, gpointer user_data) 
{ 
    GtkWidget *window; 

    window = gtk_application_window_new (app); 
    gtk_window_set_title (GTK_WINDOW (window), "Window"); 
    gtk_window_set_default_size (GTK_WINDOW (window), 200, 200); 
    gtk_widget_show_all (window); 
} 

機能私が使用していたモデルとして

.h(ヘッダファイル)

#include <gtk/gtk.h> 
#ifndef FUNCTIONS_H_INCLUDED 
#define FUNCTIONS_H_INCLUDED 

static void activate (GtkApplication* app, gpointer user_data); 
#endif 

main.cの

#include "stdio.h" 
#include <gtk/gtk.h> 
#include "Functions.h" 

int main(int argc,  char **argv) 
{ 
    GtkApplication *app; 
    int status; 

    app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE); 
    g_signal_connect (app, "activate", G_CALLBACK (activate), NULL); 
    status = g_application_run (G_APPLICATION (app), argc, argv); 
    g_object_unref (app); 
    return status; 
} 

私がコンパイルし、さは言う:

gcc -Wall `pkg-config --cflags gtk+-3.0` Functions.c Main.c `pkg-config --libs gtk+-3.0` 
Functions.c:7:13: warning: ‘activate’ defined but not used [-Wunused-function] 
static void activate (GtkApplication* app, gpointer user_data) 
      ^
In file included from Main.c:4:0: 
Functions.h:7:14: warning: ‘activate’ used but never defined 
    static void activate (GtkApplication* app, gpointer user_data); 
      ^
/tmp/ccWzazr0.o: I funktionen "main": 
Main.c:(.text+0x38): undefined reference to `activate' 
collect2: error: ld returned 1 exit status 

とコンパイルされていません!

+0

@Gerhardhさんが提案した「静的」を削除することで問題が解決しました –

+0

答えがあなたの問題を解決した場合は、その答えを受け入れたと考えるかもしれません。 – Gerhardh

+0

私は大好きです。しかし、私はそれを受け入れられたものとしてどのようにマークしますか? –

答えて

1

はい、GTKプログラムは複数のCファイルに分割できます。

あなたはその単一のCソースファイル内の関数にのみ表示され、あなたのコンパイラを言っているので、あなたがエラーを取得する:あなたが別のソースファイルから、その関数を使用する場合は、削除する必要が

static void activate (GtkApplication* app, gpointer user_data) 

staticキーワード。 ヘッダーファイルとCファイルの両方で削除する必要があります。

関連する問題