我使用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调用的未定义引用。很明显,我在链接器命令行中遗漏了一些内容,但无法解决问题。
答案 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
重试链接并重复任何剩余的未定义引用。