链接失败 - 对图形函数的未定义引用

时间:2015-03-29 12:19:25

标签: c++ windows mingw

我使用Visual Studio 2008编译了C ++ / Windows程序。该程序只包含两个.cpp文件。我现在正在尝试使用MinGW编译和链接它。到目前为止,我已经成功编译了两个源文件而没有错误,但现在当我用命令链接它们时......

g++ -o program.exe file1.o file2.o

...我得到许多“未定义引用...”的实例,各种图形相关的功能如:

GetStockObject, SelectObject, MoveTo, LineTo, SetPixel, TextOut, BitBlt, CreatePen etc.

我没有获得任何其他类型的Windows调用的未定义引用。很明显,我在链接器命令行中遗漏了一些内容,但无法解决问题。

3 个答案:

答案 0 :(得分:2)

由于这涉及两个(类似的)先前答案,我将其作为单独的答案添加,而不是作为对前面答案的重复评论。

更好,而不是跳入并添加“-lgdi32”,您应该先添加“-mwindows”选项;这告诉GCC您正在构建一个Windows应用程序(它的默认设置是“控制台”应用程序类型),因此它会自动绑定许多其他图形设备接口特定的库(其中一个是gdi32.dll)。只有在添加此选项仍无法解析所有符号时,您才需要担心可能需要的其他非默认库。

答案 1 :(得分:1)

所有这些功能都位于Gdi32.dll。您需要链接Gdi32.lib才能使其正常运行。你可以尝试:

g++ -o program.exe file1.o file2.o -L MinGW\lib -lgdi32

顺便说一句,Microsoft广泛记录每个函数并命名相应的库。例如:GetStockObject

答案 2 :(得分:1)

你可以这样解决: 对于每个未定义的引用,请在Microsoft Developer Network文档中查找该函数。在您的情况下,谷歌搜索

GetStockObject msdn

描述该功能的MSDN页面底部包含“要求”部分。这里列出了您需要链接到的所需DLL。

如果是GetStockObject,那就是Gdi32.dll

将命令行扩展为包含-lGdi32

重试链接并重复任何剩余的未定义引用。