すべての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で日々を過ごすいる
任意の助けを事前にいただきありがとうございます
はい、PKG_CHECK_MODULESが問題を解決します。ありがとう! ; o) – yoo
PKG_CHECK_MODULESに注意してください。誤って使用すると、ユーザーがプログラムやライブラリをクロスコンパイルするのが難しくなります(OSのパッケージマネージャによってインストールされたもの以外の依存関係のコンパイルやリンク) – Gunee