我可能從根本上誤解MinGW g ++。exe/ld.exe的「-static」選項,但是我的目標是使用包含靜態而非必需的庫來構建我的項目動態的,這樣我就可以運送我的可執行文件(.exe),而不需要大量的dll。帶有「-static」選項的MinGW G ++鏈接失敗
我的版本是:
gcc version 4.6.2 (GCC)
GNU ld (GNU Binutils) 2.22
我找遍了所有周圍在過去的五年時間(包括https://sourceware.org/binutils/docs/ld/Options.html#Options & http://www.mingw.org/和計算器),並且似乎無法排序了這一點(但我已經做了類似建立在Visual C++我是很新,MinGW的,並沒有生成文件語法下來冷又對不起)
這裏是我的makefile:。
#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
如果我從「CFLAGS」變量中刪除「-Wl,-static」,代碼就會生成並執行正常。 但隨着「輪候冊,-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」,我得到與其他人一起列出的錯誤,即附加實例:
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
這兩個庫添加爲測試存在於我的GTK/lib目錄爲:libgtk-3。 dll.a和libgkd-3.dll.a
我誤解了一些至關重要的東西,或者使用了不正確的語法?都?任何想法都非常感謝。謝謝!
感謝您的答覆。我意識到這可能是api dll的傻瓜差事。我看了一下GIMP,發現他們分發了所有的dll,所以這些都必須爲我工作。 – artifizz
你們可以告訴我有沒有辦法識別圖書館是靜態還是動態鏈接,以避免這樣的問題或能夠識別它們? – starach