链接故障-对图形函数的未定义引用
link failure - undefined references to graphical functions
我有一个用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
请重试链接,并对任何剩余的未定义引用重复此操作。
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- 使用mysql c++连接器的未定义引用
- 对 Scalar ::Scalar() 的未定义引用
- 对复制 CTOR 和 CTOR 的未定义引用
- 对显式实例化的模板函数的未定义引用
- TensorRT (C++ API) 对"createNvOnnxParser_INTERNAL"的未定义引用
- 2个模板化类的非模板友元函数未定义引用错误
- 编译 libfluid 样本控制器时对"event_base_del_virtual"的未定义引用
- 获取对function_name的未定义引用
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- 对结构方法的未定义引用
- 使用内联函数 c++ 的未定义引用
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 对 DLOPEN 的未定义引用
- QT C++中对全局变量的未定义引用
- 快速数学导致对"__pow_finite"的未定义引用
- 对 boost::system::d etail::system_category_instance 的未定义引用,从
- OpenCV 3.4.3 中对 'cv::String::d eallocate()' 错误的未定义引用