모든 리눅스와 의존성은 내 리눅스 상자에 올바르게 설치되어있다. 나는 간단하게 파일에 libwnck 3.0 내 테스트 프로그램을 컴파일 할 수 pkg-config --cflags -libs libwnck-3.0
autotools에서 libwnck-3.0을 통합하는 법 makefile.am
g ++ 컴파일러가 컴파일 :
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 링크입니다 내 프로그램을 문제없이 연결할 수 있습니다. 그러나 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, ./configure를하고 확인 후
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`
, 그것은 gtkmm를 컴파일 하지만 링크 오류가 발생합니다 : wnck_screen_get_default()에 대한 정의되지 않은 참조 링커에서 libwnck-3.0 패키지를 찾을 수 없습니다. ; O (
나는 많은 변화를 시도하고 성공하지 구글에서 일 지출 한
가 사전에 어떤 도움을 주셔서 감사합니다
예, PKG_CHECK_MODULES가 문제를 해결합니다. 감사! ; o) – yoo
PKG_CHECK_MODULES에주의하십시오. 잘못 사용하면 사용자가 프로그램이나 라이브러리를 크로스 컴파일하는 데 어려움이 있습니다 (예 : OS 패키지 관리자가 설치 한 다른 버전의 컴파일과 링크) – Gunee