严重系统崩溃后,我不得不重新安装所有内容(Windows 10),包括Code :: Blocks(版本16.01),以使用GTK + 2库开发我的代码。我最终得到了一个我无法解决的奇怪情况。
我的一些程序正在正确编译,而其他程序则没有。以下是无法正确编译的示例的构建日志输出的副本:
mingw32-g++.exe -L"C:\Program Files (x86)\CodeBlocks\gtk\lib" -o bin\Debug\trajecto.exe obj\Debug\main.o -lgtk-win32-2.0 -lgobject-2.0 -lglib-2.0 "C:\Program Files (x86)\CodeBlocks\gtk\lib\cairo.lib" "C:\Program Files (x86)\CodeBlocks\gtk\lib\libpangocairo-1.0.dll.a"
obj\Debug\main.o: In function `on_expose_event_trajet':
D:/calcul C/essai gtk/essai gtk/trajecto/main.c:804: undefined reference to `gdk_cairo_create'
D:/calcul C/essai gtk/essai gtk/trajecto/main.c:805: undefined reference to `gdk_cairo_create'
D:/calcul C/essai gtk/essai gtk/trajecto/main.c:806: undefined reference to `gdk_cairo_create'
D:/calcul C/essai gtk/essai gtk/trajecto/main.c:807: undefined reference to `gdk_cairo_create'
D:/calcul C/essai gtk/essai gtk/trajecto/main.c:890: undefined reference to `gdk_cairo_create'
obj\Debug\main.o:D:/calcul C/essai gtk/essai gtk/trajecto/main.c:939: more undefined references to `gdk_cairo_create' follow
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 0 second(s))
7 error(s), 0 warning(s) (0 minute(s), 0 second(s))
以下是我正确编译的程序(仍然使用gdk_cairo_create()):
mingw32-gcc.exe -Wall -mms-bitfields -g -Wall -I"C:\Program Files (x86)\CodeBlocks\gtk\include" -I"C:\Program Files (x86)\CodeBlocks\gtk\include\gtk-2.0" -I"C:\Program Files (x86)\CodeBlocks\gtk\include\cairo" -I"C:\Program Files (x86)\CodeBlocks\gtk\include\gdk" -I"C:\Program Files (x86)\CodeBlocks\gtk\include\glib-2.0" -I"C:\Program Files (x86)\CodeBlocks\gtk\lib\glib-2.0\include" -I"C:\Program Files (x86)\CodeBlocks\gtk\include\pango-1.0" -I"C:\Program Files (x86)\CodeBlocks\gtk\lib\gtk-2.0\include" -I"C:\Program Files (x86)\CodeBlocks\gtk\include\atk-1.0" -I"C:\Program Files (x86)\CodeBlocks\gtk\include\gdk-pixbuf-2.0" -c "D:\calcul C\essai gtk\essai gtk\Michal\main.c" -o obj\Debug\main.o
mingw32-g++.exe -L"C:\Program Files (x86)\CodeBlocks\gtk\lib" -o bin\Debug\ehpad.exe obj\Debug\main.o -lgtk-win32-2.0 -lgobject-2.0 -lglib-2.0 "C:\Program Files (x86)\CodeBlocks\gtk\lib\pango-1.0.lib" "C:\Program Files (x86)\CodeBlocks\gtk\lib\gdk-win32-2.0.lib" "C:\Program Files (x86)\CodeBlocks\gtk\lib\cairo.lib" "C:\Program Files (x86)\CodeBlocks\gtk\lib\libpangocairo-1.0.dll.a"
Output file is bin\Debug\ehpad.exe with size 69.91 KB
Process terminated with status 0 (0 minute(s), 1 second(s))
0 error(s), 0 warning(s) (0 minute(s), 1 second(s))
存在差异,但我怎么知道(并了解)问题在哪里?我尝试过很多不同的事情。链接器选项中包含的库对于这些示例(cairo.lib和libpangocairo-1.0.dll.a)都是相同的。
我在网上的不同地方发现编译行的参数顺序很重要,但我没有在Code :: Blocks中看到如何更改它。
这让我很生气,如果有人可以给我一个暗示,我会非常感激。
提前感谢,欢呼,Eric。
答案 0 :(得分:0)
日志会告诉您错误是链接错误,因此您需要检查链接参数之间的差异。
我首先复制/粘贴您在2个不同文件中提供的链接命令。然后使用了一个diff工具,可以分辨出一行中的不同之处:meld。结果是您缺少一些库,这些库在非工作设置中没有提供给链接器。
"C:\Program Files (x86)\CodeBlocks\gtk\lib\pango-1.0.lib"
"C:\Program Files (x86)\CodeBlocks\gtk\lib\gdk-win32-2.0.lib"
gdk_cairo_create
属于gdk
。由于您使用的是win32后端,因此它存在于gdk-win32-2.0.lib
中,因此链接器会因为您没有链接而正确地抱怨。
但是,所有这些参数通常应在链接器选项中按calls to pkg-config
进行排序。这可以避免遗忘依赖关系。