2

現在、vala でプロジェクトに取り組んでいますが、プロジェクトをコンパイルするのに問題があります。ファイルは valac を通過しますが、問題ありませんが、次のエラーが発生します。

C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD.o:EditorWindow.vala.c:(.text+0x437): gtk_source_view_new' C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD.o:EditorWindow.vala.c:(.text+0x48a): undefined reference togtk_source_view_set_auto_indent への未定義の参照' C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD. o:EditorWindow.vala.c:(.text+0x4a2): gtk_source_view_set_indent_on_tab' C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD.o:EditorWindow.vala.c:(.text+0x4ba): undefined reference togtk_source_view_set_show_line_numbers への未定義の参照' C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD.o:EditorWindow.vala.c:(.text+0x4d2): gtk_source_view_set_insert_spaces_instead_of_tabs'への未定義の参照gtk_source_view_set_highlight_current_line' C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD.o:EditorWindow.vala.c:(.text+0x4ea): undefined reference to' C:\Users\Andrew\AppData\Local\Temp/ccEYx9mD.o:EditorWindow.vala.c:(.text+0xf74): `gtk_source_view_get_type' への未定義の参照

失敗している問題のファイルのコードは次のとおりです。

using Gtk;
using Gtk.Stock;
using Gdk;

public class EditorWindow : GLib.Object
{
    public Gtk.SourceView EditorWindow {get;set;}
    public HBox TabHeader {get;set;}
    private Gtk.Image icon {get;set;}
    private Label name {get;set;}
    private Button closeButton {get;set;}
    public unowned Notebook parent {get;set;}


    public EditorWindow(File? file = null, Notebook parent)
    {
        //Interperet file data
        if(file == null)
        {
            this.name = new Label("testPage.cs");
        }
        else
        {
            //get all necessary file data
        }

        this.TabHeader = new HBox(false, 0);
        //this.name = new Label("testPage.cs");
        this.closeButton = new Button();
        this.closeButton.set_relief(ReliefStyle.NONE);
        this.closeButton.set_focus_on_click(false);
        this.closeButton.add(new Gtk.Image.from_stock(Gtk.Stock.CLOSE, IconSize.MENU));
        this.icon = new Gtk.Image.from_stock(Gtk.Stock.FILE, IconSize.MENU);
        this.TabHeader.pack_start(this.icon, false, false, 0);
        this.TabHeader.pack_start(this.name, true, true, 0);
        this.TabHeader.pack_start(this.closeButton, false, false, 0);
        this.EditorWindow = new Gtk.SourceView();
        this.EditorWindow.auto_indent = true;
        this.EditorWindow.indent_on_tab = true;
        this.EditorWindow.show_line_numbers = true;
        this.EditorWindow.highlight_current_line = true;
        this.EditorWindow.insert_spaces_instead_of_tabs = false;
        //parent.append_page(this.EditorWindow, this.TabHeader);

        //Read libraries to register objects and methods

        //Parse all lines and provide labels


    }

    public void ParseLibraries()
    {

    }

    public void ParseLocalFiles()
    {

    }

    public void ParseProjectFiles()
    {

    }
}

これらの 5 行の後、ファイルは失敗し、collect2: ld returne 1 exit status.

この問題を解決する方法はありますか? どんな助けでも大歓迎です。

編集

私が使用したコマンド ライン コンパイルは次のとおりvalac Main.vala GUI.vala EditorWindow.vala -o Valarian.exe --enable-checking --pkg gtk+-2.0 --pkg gdk-2.0 --pkg gtksourceview-2.0 --threadです。これを Windows で実行しているので、gtk/gdk/sourceview 2.0 を使用しています。

4

2 に答える 2

0

MingW は、リンクするときに少し奇妙です。同じライブラリ参照が複数回必要になる場合があります。まず、順番を gtksourceview、gtk、gdk に変更してみてください。これでは不十分な場合があります。MingW のリンカーは、複雑な理由で循環参照を解決できないため、ライブラリを複数回指定する必要があります。私は使用valac -Cしてから呼び出します:

i586-mingw32msvc-gcc -o mybin sources.cpkg-config --cflags --libs gconf-2.0 gtk+-2.0 glib-2.0 gtk+-2.0 glib-2.0 gtk+-2.0 glib-2.0

ライブラリのばかげた繰り返しに注意してください。MingW クロス コンパイラを使用してビルドしている場合は、環境変数を設定して引数PKG_CONFIG_PATH=$(MING_ROOT)/lib/pkgconfigに渡す必要がある場合もあります。pkg-config--define-variable=prefix=$(MING_ROOT)

于 2012-12-17T14:45:44.890 に答える
0

ここで自分の質問に答えるのは好きではありませんが、間違った方向を見ていたため、次のようになります。

コンパイラで「未定義の参照」エラーが発生するという問題は、EditorWindow クラスの先頭にある SourceView の前に名前空間「Gtk」を手動で適用したことが原因でした。Vala コンパイラの性質上、SourceView は Gtk 名前空間にあるためエラーにはなりませんでしたが、どうやら valac と gcc の間で問題が発生したようです。Gtk.SourceViewに変更するとすぐにSourceView、プログラムがコンパイルされました。

于 2012-12-20T08:43:42.687 に答える