error LNK2019: 无法解析的外部符号解决方法

error LNK2019: 无法解析的外部符号
本帖最后由 tangmingyang2015 于 2015-07-07 15:56:53 编辑
源程序在VS2005和PROE4.0配置环境下可以编译成功,生成dll文件,但是在VS2008和PROE5.0配置环境下编译却产生如下的错误:

1>   正在创建库 Debug/Ch5.lib 和对象 Debug/Ch5.exp
1>Ch5.obj : error LNK2019: 无法解析的外部符号 _ProWindowActivate,该符号在函数 "enum ProErrors __cdecl UsrActivateCurrentWindow(void)" (?UsrActivateCurrentWindow@@YA?AW4ProErrors@@XZ) 中被引用
1>RESULTLI.obj : error LNK2001: 无法解析的外部符号 _ProWindowActivate
1>Ch5.obj : error LNK2019: 无法解析的外部符号 _ProWindowCurrentGet,该符号在函数 "enum ProErrors __cdecl UsrActivateCurrentWindow(void)" (?UsrActivateCurrentWindow@@YA?AW4ProErrors@@XZ) 中被引用
1>Ch5.obj : error LNK2019: 无法解析的外部符号 _ProMenubarmenuPushbuttonAdd,该符号在函数 _user_initialize 中被引用
1>Ch5.obj : error LNK2019: 无法解析的外部符号 _ProCmdActionAdd,该符号在函数 _user_initialize 中被引用
1>Ch5.obj : error LNK2019: 无法解析的外部符号 _ProMenubarmenuMenuAdd,该符号在函数 _user_initialize 中被引用
1>Ch5.obj : error LNK2019: 无法解析的外部符号 _ProMenubarMenuAdd,该符号在函数 _user_initialize 中被引用
1>Ch5.obj : error LNK2019: 无法解析的外部符号 _ProStringToWstring,该符号在函数 _user_initialize 中被引用
1>RESULTLI.obj : error LNK2001: 无法解析的外部符号 _ProStringToWstring
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProMdlCurrentGet,该符号在函数 __catch$?OnBnClickedBuju@RESULTLI@@QAEXXZ$0 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProMdlErase,该符号在函数 __catch$?OnBnClickedBuju@RESULTLI@@QAEXXZ$0 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProWindowCurrentSet,该符号在函数 __catch$?OnBnClickedBuju@RESULTLI@@QAEXXZ$0 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProMdlDisplay,该符号在函数 __catch$?OnBnClickedBuju@RESULTLI@@QAEXXZ$0 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProObjectwindowCreate,该符号在函数 __catch$?OnBnClickedBuju@RESULTLI@@QAEXXZ$0 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProMdlTypeGet,该符号在函数 __catch$?OnBnClickedBuju@RESULTLI@@QAEXXZ$0 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProMdlLoad,该符号在函数 __catch$?OnBnClickedBuju@RESULTLI@@QAEXXZ$0 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProMdlRename,该符号在函数 __catch$?OnBnClickedBuju@RESULTLI@@QAEXXZ$0 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProWstringToString,该符号在函数 __catch$?OnBnClickedBuju@RESULTLI@@QAEXXZ$0 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProMdlNameGet,该符号在函数 __catch$?OnBnClickedBuju@RESULTLI@@QAEXXZ$0 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProFeatureDelete,该符号在函数 "int __cdecl UserAssembleByDatums10(struct sld_part *,struct sld_part *)" (?UserAssembleByDatums10@@YAHPAUsld_part@@0@Z) 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProSolidRegenerate,该符号在函数 "int __cdecl UserAssembleByDatums10(struct sld_part *,struct sld_part *)" (?UserAssembleByDatums10@@YAHPAUsld_part@@0@Z) 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProAsmcompConstraintsSet,该符号在函数 "int __cdecl UserAssembleByDatums10(struct sld_part *,struct sld_part *)" (?UserAssembleByDatums10@@YAHPAUsld_part@@0@Z) 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProArrayObjectAdd,该符号在函数 "int __cdecl UserAssembleByDatums10(struct sld_part *,struct sld_part *)" (?UserAssembleByDatums10@@YAHPAUsld_part@@0@Z) 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProAsmcompconstraintCompreferenceSet,该符号在函数 "int __cdecl UserAssembleByDatums10(struct sld_part *,struct sld_part *)" (?UserAssembleByDatums10@@YAHPAUsld_part@@0@Z) 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProAsmcompconstraintAsmreferenceSet,该符号在函数 "int __cdecl UserAssembleByDatums10(struct sld_part *,struct sld_part *)" (?UserAssembleByDatums10@@YAHPAUsld_part@@0@Z) 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProAsmcompconstraintTypeSet,该符号在函数 "int __cdecl UserAssembleByDatums10(struct sld_part *,struct sld_part *)" (?UserAssembleByDatums10@@YAHPAUsld_part@@0@Z) 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProAsmcompconstraintAlloc,该符号在函数 "int __cdecl UserAssembleByDatums10(struct sld_part *,struct sld_part *)" (?UserAssembleByDatums10@@YAHPAUsld_part@@0@Z) 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProSelectionAlloc,该符号在函数 "int __cdecl UserAssembleByDatums10(struct sld_part *,struct sld_part *)" (?UserAssembleByDatums10@@YAHPAUsld_part@@0@Z) 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProAsmcomppathInit,该符号在函数 "int __cdecl UserAssembleByDatums10(struct sld_part *,struct sld_part *)" (?UserAssembleByDatums10@@YAHPAUsld_part@@0@Z) 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProModelitemByNameInit,该符号在函数 "int __cdecl UserAssembleByDatums10(struct sld_part *,struct sld_part *)" (?UserAssembleByDatums10@@YAHPAUsld_part@@0@Z) 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProArrayAlloc,该符号在函数 "int __cdecl UserAssembleByDatums10(struct sld_part *,struct sld_part *)" (?UserAssembleByDatums10@@YAHPAUsld_part@@0@Z) 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProAsmcompIsUnderconstrained,该符号在函数 "int __cdecl UserAssembleByDatums10(struct sld_part *,struct sld_part *)" (?UserAssembleByDatums10@@YAHPAUsld_part@@0@Z) 中被引用
1>RESULTLI.obj : error LNK2019: 无法解析的外部符号 _ProAsmcompAssemble,该符号在函数 "int __cdecl UserAssembleByDatums10(struct sld_part *,struct sld_part *)" (?UserAssembleByDatums10@@YAHPAUsld_part@@0@Z) 中被引用

请问这是怎么回事呀?怎么解决呀?据说是链接错误,有需要的lib没有加入链接,不 知道是哪个lib?求解决!
------解决思路----------------------
lib文件没有引用正确,看看lib环境的路径
------解决思路----------------------
就是没有找到lib文件。

按里面的提示,搜一下缺少的函数 是在那个头文件定义,根据头文件 名找lib
------解决思路----------------------
你看看  PROE5.0  的环境配置正确吗
------解决思路----------------------
将错误信息中出现的标识符放在百度里面搜一下,看其在哪个.lib中,然后在本地硬盘上搜索该.lib,如果没有,在网上搜索相关库或模块下载安装,然后将其所在目录填写到“附加依赖库所在目录”中,将其名字添加到“附加依赖库”中,重新连接。
VC6:
工程、设置、C/C++、分类:Preprocessor、附加包含路径:填写附加头文件所在目录 逗号间隔多项
工程、设置、Link、分类:Input、附加库路径:填写附加依赖库所在目录 分号间隔多项
工程、设置、Link、分类:Input、对象/库模块:填写附加依赖库的名字.lib 空格间隔多项
VS20xx:
项目、属性、C/C++、附加包含目录:填写附加头文件所在目录 分号间隔多项
项目、属性、链接器、常规、附加库目录:填写附加依赖库所在目录 分号间隔多项
项目、属性、链接器、输入、附加依赖项:填写附加依赖库的名字.lib 空格或分号间隔多项

------解决思路----------------------
这个一般是没有找到函数定义造成的,解决方法楼上说的很清楚。
------解决思路----------------------
_ProWindowActivate可以看出,不是系统的lib库不正确,而是你添加的第三方库(PROE)的lib库要么版本不对,要么路径指定的不对所以找不到PROE库的lib
------解决思路----------------------
引用:
这是我的库文件路径:C:\Program Files\proeWildfire 5.0\prodevelop\x86e_win64\obj
                                        C:\Program Files\proeWildfire 5.0\protoolkit\x86e_win64\obj
应该没有问题。不知道是不是有哪个lib文件没有添加?
我现在添加的附加依赖项有:wsock32.lib  mpr.lib  psapi.lib  protk_dll.lib  prodev_dll.lib  netapi32.lib

感觉你给的路径是错误的。这样,你生成的dll的名字是“xxxx.dll”,应该有生成“xxxx.lib”,
你找到xxxx.lib,然后把它的绝对路径(比如:C:/MyFiles/xxxx.lib)通过#pragma comment(lib,"C:/MyFiles/xxxx.lib")来进行导入库动作。
------解决思路----------------------
引用:
Quote: 引用:

_ProWindowActivate可以看出,不是系统的lib库不正确,而是你添加的第三方库(PROE)的lib库要么版本不对,要么路径指定的不对所以找不到PROE库的lib

恩,之前在Pro/E 4.0和VS2005配置环境可以编译成功,我的Pro/E 4.0是32位的,而在Pro/E 5.0和VS2008配置环境中,我的Pro/E 5.0是64位,所以才出现上面这个问题。后来,我安装了32位的Pro/E 5.0,这个问题就解决了!


那就是lib库的路径不对导致的链接不过,因为装了32位的,会放在32位目录,你仔细看看工程的配置吧
------解决思路----------------------
引用:
Quote: 引用:

_ProWindowActivate可以看出,不是系统的lib库不正确,而是你添加的第三方库(PROE)的lib库要么版本不对,要么路径指定的不对所以找不到PROE库的lib

虽然编译成功生成dll文件,但是在Pro/E 5.0中一打开就出现Debug Assertion Failed这样的对话框,不知道哪里出了问题?求解决!
error LNK2019: 无法解析的外部符号解决方法


可能是库不兼容导致的,建议你64位平台使用64位的库,