2017-01-24 1 views
-2

すべてのlibsと依存関係は、自分のLinuxのボックスに正しくインストールされています。autotoolsのmakefile.amにlibwnck-3.0を統合する方法

LDFLAGS = -lX11 `pkg-config --cflags --libs gtkmm-3.0 libwnck-3.0 ` 
CPPFLAGS = -g -Wall -Wno-reorder -std=c++11 `pkg-config --cflags gtkmm-3.0 libwnck-3.0` 

OUTPUTDIR = bin 

# Macro that uses the backslash to extend to multiple lines. 
OBJS = \ 
main.o \ 
$(NULL) 

all:$(OBJS) 
    $(CC) $(CPPFLAGS) -o$(OUTPUTDIR)/$(APPNAME) $(OBJS) $(LDFLAGS) 

main.o:main.cpp 
     $(CC) -I$(INCLUDE) $(CPPFLAGS) -c main.cpp 

... 

ポイントは、それがlibwnck-3.0のコンパイルとリンクすることである私が使用する必要があります: pkg-config --cflags -libs libwnck-3.0

グラムを++コンパイラがコンパイルされます私は、簡単なメイクファイルでlibwnck-3.0と私のテストプログラムをコンパイルすることができます私のプログラムを問題なくリンクすることができます。 しかし、私はautotools Makefile.amでこれを行うことができますか?

ここmain.cppにサンプル:

#define WNCK_I_KNOW_THIS_IS_UNSTABLE 1 

#include <libwnck/libwnck.h> 
#include <gtkmm.h> 

int main(int argc, char *argv[]) 
{ 
    gdk_init (&argc, &argv); 

    //check if libwnck works  
    WnckScreen* wnckscreen = wnck_screen_get_default(); 

    Gtk::Main kit(argc, argv); 
    Gtk::Window mainWindow; 
    Gtk::Button button("Click here"); 
    mainWindow.set_title("GTKmm Demo"); 
    mainWindow.set_border_width(4); 
    mainWindow.set_default_size(200, 50); 
    mainWindow.add(button); 
    button.show(); 
    Gtk::Main::run(mainWindow); 



    return 0; 

} 

、ここでAutomakeのテストMakefile.am:実行autogen.sh後

bin_PROGRAMS = testprogram 
testprogram_SOURCES = main.cpp 
# that is for gtkmm 
testprogram_CPPFLAGS = $(GTKMM_CFLAGS) 
# the include for libwnck-3.0 
testprogram_CPPFLAGS += -I/usr/include/libwnck-3.0 
testprogram_CPPFLAGS = $(GTKMM_CFLAGS) 
# Linker flags 
testprogram_LDFLAGS =`pkg-config --cflags --libs gtkmm-3.0 libwnck-3.0` 

、./configureを作ると、それはgtkmmのをコンパイル私はリンクエラーを受け取ります:wnck_screen_get_default()への未定義参照 リンカはlibwnck-3.0パッケージを見つけることができません。 ; O(

私は多くのバリエーションを試し、成功せずにGoogleで日々を過ごすいる

任意の助けを事前にいただきありがとうございます

答えて

1

あなたは、必要なライブラリが存在するかどうかをチェックするためにPKG_CHECK_MODULESを使用する必要があります。!そして、ばかりに、それをリンクするWNCK_LIBSWNCK_CFLAGSを使用しています。

もちろん

あなたはそれらが異なる意味を持っているように、ライブラリを渡すために_LDADD、およびない_LDFLAGSを使用する必要があります。

+0

はい、PKG_CHECK_MODULESが問題を解決します。ありがとう! ; o) – yoo

+0

PKG_CHECK_MODULESに注意してください。誤って使用すると、ユーザーがプログラムやライブラリをクロスコンパイルするのが難しくなります(OSのパッケージマネージャによってインストールされたもの以外の依存関係のコンパイルやリンク) – Gunee

関連する問題