2017-01-24 2 views
-2

모든 리눅스와 의존성은 내 리눅스 상자에 올바르게 설치되어있다. 나는 간단하게 파일에 libwnck 3.0 내 테스트 프로그램을 컴파일 할 수 pkg-config --cflags -libs libwnck-3.0autotools에서 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 (

나는 많은 변화를 시도하고 성공하지 구글에서 일 지출 한

가 사전에 어떤 도움을 주셔서 감사합니다

답변

1

당신은 필요한 라이브러리의 존재를 확인하기 위해 PKG_CHECK_MODULES를 사용해야합니다.! 그냥 WNCK_LIBS 사용 WNCK_CFLAGS은에 연결 할 수 있습니다. 물론

당신이 _LDADD, 그리고 _LDFLAGS를 사용해야하는 라이브러리를 통과, 사람들은 서로 다른 의미를 가지고있다.

+0

예, PKG_CHECK_MODULES가 문제를 해결합니다. 감사! ; o) – yoo

+0

PKG_CHECK_MODULES에주의하십시오. 잘못 사용하면 사용자가 프로그램이나 라이브러리를 크로스 컴파일하는 데 어려움이 있습니다 (예 : OS 패키지 관리자가 설치 한 다른 버전의 컴파일과 링크) – Gunee

관련 문제