链接故障-对图形函数的未定义引用



我有一个用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调用的未定义引用。很明显,我在链接器命令行中遗漏了一些内容,但无法确定是什么。

由于这跨越了之前的两个(相似的)答案,我将把它作为一个单独的答案添加,而不是作为之前答案的重复注释。

更好的做法是,与其跳进去添加"-lgdi32",不如先添加"-mwindows"选项;此选项会告诉GCC您正在构建Windows应用程序(其默认为"控制台"应用程序类型),因此会导致它自动绑定多个附加的图形设备接口特定库(其中一个是gdi32.dll)。只有在添加此选项仍然无法解决所有符号需求时,您才担心可能需要哪些其他非默认库。

所有这些函数都位于Gdi32.dll中。您需要链接Gdi32.lib才能使它们工作。你可以试试:

g++ -o program.exe file1.o file2.o -L MinGWlib -lgdi32

顺便说一句,微软对每个函数都进行了广泛的文档记录,并命名了相应的库。例如:GetStockObject。

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

GetStockObject msdn

描述该功能的MSDN页面底部包含一节"需求"。这里列出了需要链接到的DLL。

在GetStockObject的情况下,它是Gdi32.dll

扩展您的命令行以包含-lGdi32

请重试链接,并对任何剩余的未定义引用重复此操作。

最新更新