link 失败 - 未定义的图形函数引用
link failure - undefined references to graphical functions
我有使用 Visual Studio 2008 编译的 C++/Windows 程序。该程序仅包含两个 .cpp 文件。我现在正尝试使用 MinGW 编译和 link 它。到目前为止,我已经成功编译了两个源文件,没有错误,但是现在当我 link 使用命令...
g++ -o program.exe file1.o file2.o
...我得到许多 "undefined reference to.." 各种图形相关函数的实例,例如:
GetStockObject, SelectObject, MoveTo, LineTo, SetPixel, TextOut, BitBlt, CreatePen etc.
我没有得到任何其他类型的 windows 调用的未定义引用。显然我在我的 linker 命令行中遗漏了一些东西,但无法弄清楚是什么。
所有这些功能都位于 Gdi32.dll
中。您需要 link Gdi32.lib
才能使它们正常工作。你可以试试:
g++ -o program.exe file1.o file2.o -L MinGW\lib -lgdi32
顺便说一句,Microsoft 对每个函数进行了广泛的记录并命名了适当的库。例如:GetStockObject.
你可以这样解决:
对于每个未定义的引用,请在 Microsoft Developer Network 文档中查找该函数。在您的情况下,google 代表
GetStockObject msdn
描述该函数的 MSDN 页面底部包含一个部分 "Requirements"。此处列出了您需要 link 的必需 DLL。
如果是 GetStockObject,则为 Gdi32.dll
扩展命令行以包含 -lGdi32
重试 linking 并重复任何剩余的未定义引用。
由于这跨越两个(相似的)之前的答案,我将把它作为一个单独的答案添加,而不是作为对之前那些答案的重复评论。
更好的是,与其直接添加“-lgdi32”,不如先添加“-mwindows”选项;这告诉 GCC 你正在构建一个 Windows 应用程序,(它的默认值为 "console" 应用程序类型),因此导致它自动绑定一些额外的图形设备接口特定库,(其中一个是 gdi32.dll)。仅当添加此选项仍然无法解析所有符号时,您才需要担心可能需要哪些其他非默认库。
我有使用 Visual Studio 2008 编译的 C++/Windows 程序。该程序仅包含两个 .cpp 文件。我现在正尝试使用 MinGW 编译和 link 它。到目前为止,我已经成功编译了两个源文件,没有错误,但是现在当我 link 使用命令...
g++ -o program.exe file1.o file2.o
...我得到许多 "undefined reference to.." 各种图形相关函数的实例,例如:
GetStockObject, SelectObject, MoveTo, LineTo, SetPixel, TextOut, BitBlt, CreatePen etc.
我没有得到任何其他类型的 windows 调用的未定义引用。显然我在我的 linker 命令行中遗漏了一些东西,但无法弄清楚是什么。
所有这些功能都位于 Gdi32.dll
中。您需要 link Gdi32.lib
才能使它们正常工作。你可以试试:
g++ -o program.exe file1.o file2.o -L MinGW\lib -lgdi32
顺便说一句,Microsoft 对每个函数进行了广泛的记录并命名了适当的库。例如:GetStockObject.
你可以这样解决: 对于每个未定义的引用,请在 Microsoft Developer Network 文档中查找该函数。在您的情况下,google 代表
GetStockObject msdn
描述该函数的 MSDN 页面底部包含一个部分 "Requirements"。此处列出了您需要 link 的必需 DLL。
如果是 GetStockObject,则为 Gdi32.dll
扩展命令行以包含 -lGdi32
重试 linking 并重复任何剩余的未定义引用。
由于这跨越两个(相似的)之前的答案,我将把它作为一个单独的答案添加,而不是作为对之前那些答案的重复评论。
更好的是,与其直接添加“-lgdi32”,不如先添加“-mwindows”选项;这告诉 GCC 你正在构建一个 Windows 应用程序,(它的默认值为 "console" 应用程序类型),因此导致它自动绑定一些额外的图形设备接口特定库,(其中一个是 gdi32.dll)。仅当添加此选项仍然无法解析所有符号时,您才需要担心可能需要哪些其他非默认库。