转:解决 unresolved external symbol 无法解析

转自:http://www.cnblogs.com/me115/archive/2010/11/12/1875747.html

(1) vc网络编程中遇到一个编译问题,原来是少了WSOCK32.LIB。
在 project-->settings-->Link-->Object/Library modules 中加入库WSOCK32.LIB即可。
在VC中进行WINSOCK的API编程开发的时候,需要在项目中使用下面三个文件,否则会出现编译错误。
  1.WINSOCK.H: 这是WINSOCK API的头文件,需要包含在项目中。
  2.WSOCK32.LIB: WINSOCK API连接库文件。在使用中,一定要把它作为项目的非缺省的连接库包含到项目文件中去。
  3.WINSOCK.DLL: WINSOCK的动态连接库,位于WINDOWS的安装目录下。
--------------------Configuration: Example1 - Win32 Debug--------------------
Linking...
error LNK2001: unresolved external symbol _connect@12
error LNK2001: unresolved external symbol _htons@4
error LNK2001: unresolved external symbol _inet_addr@4
error LNK2001: unresolved external symbol _socket@12
error LNK2001: unresolved external symbol _closesocket@4
error LNK2001: unresolved external symbol _send@16
error LNK2001: unresolved external symbol _recv@16
error LNK2001: unresolved external symbol _WSAAsyncSelect@16
error LNK2001: unresolved external symbol _accept@12
error LNK2001: unresolved external symbol _listen@8
error LNK2001: unresolved external symbol _bind@12
(2) vc数据库SQL编程中遇到一个问题,原来是少了odbc32.lib。
在 project-->settings-->Link-->Object/Library modules 中加入库odbc32.lib 即可。
mfc程序调用了odbc api,连接时出错:
error   LNK2001:   unresolved   external   symbol   _SQLConnect@28
error   LNK2001:   unresolved   external   symbol   _SQLFetch@4
error   LNK2001:   unresolved   external   symbol   _SQLBindCol@24
error   LNK2001:   unresolved   external   symbol   _SQLFreeHandle@8
error   LNK2001:   unresolved   external   symbol   _SQLExecDirect@12
error   LNK2001:   unresolved   external   symbol   _SQLAllocHandle@12
error   LNK2001:   unresolved   external   symbol   _SQLSetEnvAttr@16
error   LNK2001:   unresolved   external   symbol   _SQLDisconnect@4
(3) vc   OpenCV图像处理编程中遇到一个问题,原来是少了cv.lib cvaux.lib cxcore.lib highgui.lib。
在 project-->settings-->Link-->Object/Library modules 中加入库cv.lib cvaux.lib cxcore.lib highgui.lib 即可。
error LNK2001: unresolved external symbol _cvReleaseImage
error LNK2001: unresolved external symbol _cvWaitKey
error LNK2001: unresolved external symbol _cvDrawContours
error LNK2001: unresolved external symbol _cvReleaseMemStorage
error LNK2001: unresolved external symbol _cvDestroyWindow
error LNK2001: unresolved external symbol _cvFindContours
error LNK2001: unresolved external symbol _cvCvtColor
error LNK2001: unresolved external symbol _cvCreateImage
error LNK2001: unresolved external symbol _cvGetSize
error LNK2001: unresolved external symbol _cvShowImage
error LNK2001: unresolved external symbol _cvLoadImage
error LNK2001: unresolved external symbol _cvNamedWindow
error LNK2001: unresolved external symbol _cvCreateMemStorage
(4) vc OpenGL三维编程中遇到一个问题,原来是少了OpenGL32.lib GLu32.lib GLaux.lib。
在 project-->settings-->Link-->Object/Library modules 中加入库OpenGL32.lib GLu32.lib GLaux.lib 即可。
error LNK2001: unresolved external symbol _gluPerspective@32
error LNK2001: unresolved external symbol _gluLookAt@72
error LNK2001: unresolved external symbol __imp__glLoadIdentity@0
error LNK2001: unresolved external symbol __imp__glMatrixMode@4
error LNK2001: unresolved external symbol __imp__glViewport@16
error LNK2001: unresolved external symbol __imp__glHint@8
error LNK2001: unresolved external symbol __imp__glDepthFunc@4
error LNK2001: unresolved external symbol __imp__glEnable@4
error LNK2001: unresolved external symbol __imp__glClearDepth@8
error LNK2001: unresolved external symbol __imp__glClearColor@16
error LNK2001: unresolved external symbol __imp__glShadeModel@4
error LNK2001: unresolved external symbol __imp__glEnd@0
error LNK2001: unresolved external symbol __imp__glVertex3f@12
error LNK2001: unresolved external symbol __imp__glBegin@4
error LNK2001: unresolved external symbol __imp__glTranslatef@12
error LNK2001: unresolved external symbol __imp__glClear@4
error LNK2001: unresolved external symbol __imp__wglDeleteContext@4
error LNK2001: unresolved external symbol __imp__wglMakeCurrent@8
error LNK2001: unresolved external symbol __imp__wglCreateContext@4
(5) vc VFW视频采集编程中遇到一个问题,原来是少了VFW32.Lib
在 project-->settings-->Link-->Object/Library modules 中加入库VFW32.Lib 即可。
error LNK2001: unresolved external symbol _capCreateCaptureWindowA@32
在创建项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数, 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有:

libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
错误可能引起的原因:
1. Windows子系统设置错误, 提示:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Windows项目要使用Windows子系统, 而不是Console, 可以这样设置:
[Project] --> [Settings] --> 选择"Link"属性页,
在Project Options中将/subsystem:console改成/subsystem:windows
2. Console子系统设置错误, 提示:
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
控制台项目要使用Console子系统, 而不是Windows, 设置:
[Project] --> [Settings] --> 选择"Link"属性页,
在Project Options中将/subsystem:windows改成/subsystem:console
3. 程序入口设置错误, 提示:
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
通常, MFC项目的程序入口函数是WinMain, 如果编译项目的Unicode版本, 程序入口必须改为wWinMainCRTStartup, 所以需要重新设置程序入口:
[Project] --> [Settings] --> 选择"C/C++"属性页,
在Category中选择Output,
再在Entry-point symbol中填入wWinMainCRTStartup, 即可
4. 线程运行时库设置错误, 提示:
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
这是因为MFC要使用多线程时库, 需要更改设置:
[Project] --> [Settings] --> 选择"C/C++"属性页,
在Category中选择Code Generation,
再在Use run-time library中选择Debug Multithreaded或者multithreaded
其中,
Single-Threaded 单线程静态链接库(release版本)
Multithreaded 多线程静态链接库(release版本)
multithreaded DLL 多线程动态链接库(release版本)
Debug Single-Threaded 单线程静态链接库(debug版本)
Debug Multithreaded 多线程静态链接库(debug版本)
Debug Multithreaded DLL 多线程动态链接库(debug版本)
单线程: 不需要多线程调用时, 多用在DOS环境下
多线程: 可以并发运行
静态库: 直接将库与程序Link, 可以脱离MFC库运行
动态库: 需要相应的DLL动态库, 程序才能运行
release版本: 正式发布时使用
debug版本: 调试阶段使用

第二类:程序没有添加必要的库。

      当copy网上的源程序,在本机编译的时候,由于新建的工程没有把连接用的库,在连接的时候添加进去,所以一些函数、变量找不到定义的库文件,从而出错。

texture.obj : error LNK2001: unresolved external symbol __imp__glEnable@4
texture.obj : error LNK2001: unresolved external symbol __imp__glTexEnvf@12
texture.obj : error LNK2001: unresolved external symbol __imp__glTexParameterf@12
texture.obj : error LNK2001: unresolved external symbol __imp__glTexImage2D@36
texture.obj : error LNK2001: unresolved external symbol __imp__glPixelStorei@8
texture.obj : error LNK2001: unresolved external symbol _auxDIBImageLoadA@4

解决方法:

1. 先弄清楚到底缺了哪些库,再在project=》setting=》link里面的moldul/lib 添加这些库的文件。

2. 可以用以下形式在源程序里面添加下面代码:

#pragma comment(lib, "openGL32.lib");
#pragma comment(lib, "glu32.lib");
#pragma comment(lib, "glaux.lib");

vc编译报错 unresolved external symbol __imp__PlaySoundA@12 解决办法

添加Winmm.lib和 头文件中包含 Mmsystem.h

选择"project"->"setting"->"link"->"Object/library   modules"然后添加"Winmm.lib"就可以了。


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: error lnk2001: unresolved external symbol _getpriority 是一个与函数 getpriority 相关的链接错误。该错误表示在链接器阶段无法找到 getpriority 函数的定义。 getpriority 函数是用于获取进程或进程组的优先级的一个标准函数,该函数声明在头文件 #include <sys/resource.h> 中。然而,由于某些原因,链接器无法找到该函数的定义,导致出现 unresolved external symbol 错误。 要解决此问题,可以按照以下步骤操作: 1. 确保在源代码中正确地包含了 <sys/resource.h> 头文件。在 C/C++ 源文件的开头添加 #include <sys/resource.h>,以确保查找到正确的函数声明。 2. 检查编译器选项是否正确设置。有时,编译器选项可能需要手动指定以链接相应的库。对于 getpriority 函数,可能需要链接 librt 或 libpthread 库。可以尝试添加 -lrt 或 -lpthread 到编译器的选项中。 3. 确保链接器能够找到 getpriority 函数的实现。实现该函数的库文件应该与编译器链接,以便在链接器阶段解决外部符号引用。这通常涉及到正确设置库文件的路径或将库文件添加到链接器的库路径中。 总结:error lnk2001: unresolved external symbol _getpriority 是一个链接错误,表示编译器无法找到 getpriority 函数的定义。要解决此问题,需要确保正确包含头文件、正确设置编译器选项和链接库文件。 ### 回答2: error lnk2001: unresolved external symbol _getpriority是一个链接错误,意味着链接器无法解析对_getpriority的外部符号引用。 _getpriority是一个用于获取进程优先级的函数,它在Windows下没有定义,因此链接器无法找到它的定义。 要解决这个问题,可以采取以下几种方法: 1. 检查代码中是否有对_getpriority函数的调用:首先检查代码中是否存在对_getpriority函数的调用,如果没有必要使用该函数,可以删除相关的代码,这样可以避免链接错误。 2. 更改代码以使用Windows下的类似功能:如果确实需要使用进程优先级相关的功能,可以改用Windows下的类似函数来代替_getpriority。可以使用Windows API中的GetPriorityClass函数来获取进程优先级,该函数返回一个整数值表示进程的优先级类别。 3. 添加相应的库文件:如果你确定代码中需要使用_getpriority函数,可以找到包含该函数定义的库文件,并将其添加到链接器的库文件路径中。可以通过在项目属性中添加相应的附加库路径和库文件名称来实现。 总之,要解决error lnk2001: unresolved external symbol _getpriority链接错误,可以通过删除对_getpriority函数的调用、使用Windows API中的相关函数或添加相应的库文件来解决问题。 ### 回答3: 这个错误是由于在C++代码中使用了一个未解析的外部符号"getpriority"所引起的。"getpriority"是一个用于获取进程优先级的函数,属于POSIX标准库中的一部分。 在C++中,要使用"getpriority"函数,需要包含对应的头文件<sys/resource.h>,并且需要链接实现该函数的库文件。根据错误提示"error lnk2001: unresolved external symbol _getpriority",可以推断出缺少对应的库文件的链接。 解决这个问题可以按照以下步骤进行: 1. 确保正确地包含了头文件<sys/resource.h>: #include <sys/resource.h> 2. 确认编译器的选项是否正确地链接了对应的库文件。 对于使用GCC编译器的情况,需要添加"-l"参数指定链接的库文件名,例如: g++ main.cpp -o main -l库文件名 3. 如果是在Windows平台上开发,可能需要使用Cygwin或MinGW等工具链来编译和链接,以确保POSIX相关的功能可用。 此外,请注意确保包含正确的库文件,并将其放置在正确的位置,以便编译器能够找到并链接到正确的实现。 总之,"error lnk2001: unresolved external symbol _getpriority"错误是由于未能解析所需库文件中的"getpriority"函数引起的。通过检查头文件和链接选项,以及在合适的位置放置正确的库文件,可以解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值