2014-04-18 1 views
0

MinGW g ++ .exe/ld.exe에 대한 "정적"옵션을 근본적으로 오해 할 수도 있지만 필요한 라이브러리를 포함하여 프로젝트를 빌드하는 대신 동적으로 제공하므로 수 많은 DLL없이 실행 파일 (.exe)을 제공 할 수 있습니다. (https://sourceware.org/binutils/docs/ld/Options.html#Options & http://www.mingw.org/ 및 유래 포함) 나는 지난 5 시간 동안 모든 주변 검색 한"-static"옵션을 사용한 MinGW G ++ 링크가 실패합니다.

gcc version 4.6.2 (GCC) 
GNU ld (GNU Binutils) 2.22 

,이를 정렬 할 수없는 것 (아직 나는 짓을했는지 :

내 버전은 ...

#Makefile: main.cpp 
CC = g++ 
GCR = glib-compile-resources 
GCR_SRC_FLAGS = --generate-source 
GCR_HDR_FLAGS = --generate-header 

LIBPATH = -L C:/MinGW/lib -L C:/MinGW/GTK3/lib 
LIBS = -lgdi32 -lkernel32 -luser32 -lws2_32 -lgtk-3.dll -lgdk-3.dll 
CFLAGS = -Wall -mwindows -Wl,-static 
#check for invalid symbols: https://developer.gnome.org/gtk3/stable/gtk-migrating-2-to-3.html#id-1.6.3.3.3 
CFLAGS += -DGTK_DISABLE_SINGLE_INCLUDES 
#disable deprecated symbols 
CFLAGS += -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED 

#main: main.o theme.o theme.gresource.xml $(shell $(GCR) --generate-dependencies theme.gresource.xml) 
# $(GCR) $(GCR_SRC_FLAGS) theme.gresource.xml 
# $(GCR) $(GCR_HDR_FLAGS) theme.gresource.xml 
# -Wl,-whole-archive -Wl,-no-whole-archive 
main: main.o theme.o theme.gresource 
    $(CC) $(CFLAGS) $(LIBPATH) main.o theme.o -o main $(LIBS) `pkg-config gio-windows-3.0` `pkg-config gtk+-3.0 --cflags --libs` `pkg-config gdk-3.0 --cflags --libs` 
main.o: main.cpp main.h 
    $(CC) $(CFLAGS) $(LIBPATH) -c main.cpp -o main.o $(LIBS) `pkg-config gio-windows-3.0` `pkg-config gtk+-3.0 --cflags --libs` `pkg-config gdk-3.0 --cflags --libs` 
theme.o: theme.c 
    $(CC) $(CFLAGS) $(LIBPATH) -c theme.c -o theme.o $(LIBS) `pkg-config gio-windows-3.0` `pkg-config gtk+-3.0 --cflags --libs` `pkg-config gdk-3.0 --cflags --libs` 
theme.gresource: theme.gresource.xml $(shell $(GCR) --generate-dependencies theme.gresource.xml) 
    $(GCR) $(GCR_SRC_FLAGS) theme.gresource.xml 
    $(GCR) $(GCR_HDR_FLAGS) theme.gresource.xml 
clean: 
    rm -f *.o main 
: 비슷한 내가는 MinGW 꽤 새로운 해요, 아직 차가운 아래로 메이크 구문이없는 죄송합니다) 여기에

내 메이크 Visual C++에서 빌드

"CFLAGS"변수에서 "-Wl, -static"을 제거하면 코드가 올바르게 빌드되고 실행됩니다. 그러나와 "-Wl, -static", 나는 다음과 같은 오류를 얻을 포함 :

$ make 
g++ -Wall -mwindows -Wl,-static -DGTK_DISABLE_SINGLE_INCLUDES -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -L C:/MinGW/lib -L C:/MinGW/GTK3/lib -c main.cpp 
-o main.o -lgdi32 -lkernel32 -luser32 -lws2_32 -lgtk-3.dll -lgdk-3.dll `pkg-config gio-windows-3.0` `pkg-config gtk+-3.0 --cflags --libs` `pkg-config gdk-3.0 - 
-cflags --libs` 
g++ -Wall -mwindows -Wl,-static -DGTK_DISABLE_SINGLE_INCLUDES -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -L C:/MinGW/lib -L C:/MinGW/GTK3/lib -c theme.c 
-o theme.o -lgdi32 -lkernel32 -luser32 -lws2_32 -lgtk-3.dll -lgdk-3.dll `pkg-config gio-windows-3.0` `pkg-config gtk+-3.0 --cflags --libs` `pkg-config gdk-3.0 - 
-cflags --libs` 
g++ -Wall -mwindows -Wl,-static -DGTK_DISABLE_SINGLE_INCLUDES -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -L C:/MinGW/lib -L C:/MinGW/GTK3/lib main.o them 
e.o -o main -lgdi32 -lkernel32 -luser32 -lws2_32 -lgtk-3.dll -lgdk-3.dll `pkg-config gio-windows-3.0` `pkg-config gtk+-3.0 --cflags --libs` `pkg-config gdk-3.0 
--cflags --libs` 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/ld.exe: cannot find -lgtk-3 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/ld.exe: cannot find -lgdk-3 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/ld.exe: cannot find -lfreetype 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/ld.exe: cannot find -lcairo-gobject 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/ld.exe: cannot find -lgdk-3 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/ld.exe: cannot find -lfreetype 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/ld.exe: cannot find -lcairo-gobject 
collect2: ld returned 1 exit status 
make: *** [main] Error 1 

나는이 큰 의미가 확신 아니에요,하지만 테스트로 나는 "추가 -lgtk-3.dll -lgdk- 3.dll "을 내"LIBS "변수에 추가하고 (".dll "접미어로) 오류를 유발하지 않습니다. 내가 ".DLL"을 생략하면, 나는 즉, 다른 사람과 함께 나와있는 오류의 추가 인스턴스를 얻을 :

이 두 라이브러리가 아니라 내 GTK/lib 디렉토리에 존재하는 테스트로 추가
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/ld.exe: cannot find -lgtk-3 
c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/ld.exe: cannot find -lgdk-3 

: libgtk-3. dll.a 및 libgkd-3.dll.a

나는 중요한 것을 오해하고 있으며, 틀린 구문을 사용하고 있습니까? 양자 모두? 어떤 생각이라도 대단히 감사합니다. 감사!

답변

1

정적 연결을 수행하려면 이러한 라이브러리의 정적 버전이 필요합니다.

여기서 정적 버전의 gtk-3, gdk-3, freetype 등이 필요합니다. 보통 그들이이라고

libgtk-3.a, libgdk-3.a ... 답장을

+0

감사합니다. 나는 이것이 아마 api dll을 위해 할 사기 심부름 깨달았다. GIMP를 살펴본 결과, 설치시 모든 dll을 배포한다는 사실을 알았 기 때문에 저를 위해 일해야합니다. – artifizz

+0

여러분은 저에게 라이브러리가 정적으로 또는 동적으로 링크되어 있는지 여부를 인식하여 그러한 문제를 피하거나이를 인식 할 수 있는지 인식 할 수있는 방법이 있습니까? – starach

관련 문제