在 VS2010 中,VC++ 错误 LNK 2019 with CoolProp 5.0.0
Posted
技术标签:
【中文标题】在 VS2010 中,VC++ 错误 LNK 2019 with CoolProp 5.0.0【英文标题】:In VS2010 ,VC++ error LNK 2019 with CoolProp 5.0.0 【发布时间】:2014-12-07 07:07:30 【问题描述】:我是一名业余 VC++ 开发人员。
我想在我的学术 VC++ 项目中使用 CoolProp (http://www.coolprop.org/) 作为 win 32 应用程序中的静态库,使用在 x64 笔记本电脑上运行的 VS2010 Ultimate。
所以我已经下载了,
1.CoolProp.lib 来自http://sourceforge.net/projects/coolprop/files/CoolProp/5.0.2/static_library/ 2.CoolProp.h 来自http://sourceforge.net/projects/coolprop/files/CoolProp/5.0.0/shared_library/
并将两者都放在系统文件夹中。
接下来我在 VS2010 中创建了一个示例 win32 控制台应用程序作为空 sln。 在 Properties->C/C++->General 中添加 CoolProp.h 作为附加包含目录(同时复制了所有依赖的头文件) 在 Properties->Linker->Input->Additional Dependencies 中添加 CoolProp.lib 作为附加依赖项
然后我从http://www.coolprop.org/coolprop/HighLevelAPI.html#high-level-api复制了这个程序
#include "CoolProp.h"
#include <iostream>
using namespace CoolProp;
int main()
// First type (slowest, due to most string processing, exposed in DLL)
std::cout << PropsSI("Dmolar","T",298,"P",1e5,"Propane[0.5]&Ethane[0.5]") << std::endl; // Default backend is HEOS
std::cout << PropsSI("Dmolar","T",298,"P",1e5,"HEOS::Propane[0.5]&Ethane[0.5]") << std::endl;
std::cout << PropsSI("Dmolar","T",298,"P",1e5,"REFPROP::Propane[0.5]&Ethane[0.5]") << std::endl;
std::vector<double> z(2,0.5);
// Second type (C++ only, a bit faster)
std::cout << PropsSI("Dmolar","T",298,"P",1e5,"Propane&Ethane", z) << std::endl;
std::cout << PropsSI("Dmolar","T",298,"P",1e5,"HEOS::Propane&Ethane", z) << std::endl;
std::cout << PropsSI("Dmolar","T",298,"P",1e5,"REFPROP::Propane&Ethane", z) << std::endl;
return EXIT_SUCCESS;
并尝试构建。
构建(但编译完美)由于
而失败main.obj : error LNK2019: unresolved external symbol "double __cdecl PropsSI(char,char,double,char,double,char *)" (?Props@@YANDDDNPAD@Z) 在函数 _main 中引用强>
有人可以帮我解决这个问题吗? 我已经阅读了以下来自 *** 的帖子,但 无法解决,请帮助
What is an undefined reference/unresolved external symbol error and how do I fix it? "error LNK2019: unresolved external symbol" error in Visual Studio 2010 Error LNK2019: Unresolved External Symbol in Visual Studio【问题讨论】:
【参考方案1】:它对我有用,(VS 2010)如下: - 将文件“CoolPropLib.h”添加到您的项目中,方法是右键单击解决方案资源管理器中的头文件文件夹 -> 添加 -> 现有项目 -> 选择“CoolPropLib.h”。 -打开文件'CoolPropLib.h'并注释第22行如下(//#include“PlatformDetermination.h”)。 - 添加这两行 (23, 24) :
#define CONVENTION __stdcall
#define EXTERNC
-使用由 __stcall 构建的库,而不是由 __cdecel 构建的库:http://sourceforge.net/projects/coolprop/files/CoolProp/5.0.0/shared_library/Windows/32bit__stdcall_calling_convention/CoolProp.lib/download -您将需要来自 :http://sourceforge.net/projects/coolprop/files/CoolProp/5.0.0/shared_library/Windows/32bit__stdcall_calling_convention/CoolProp.dll/download 的 dll(用于 __stdcall) - 在 Windows 资源管理器(不在 VS 中)的项目文件夹中创建名为“lib”的文件夹,并将“CoolProp.lib”放入其中。 -在属性->链接器->常规->附加库目录,添加$(ProjectDir)\lib -我测试的代码是:
#include "stdafx.h"
#include <iostream>
#include <vector>
#include "CoolPropLib.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
// First type (slowest, due to most string processing, exposed in DLL)
std::cout << PropsSI("Dmolar","T",298,"P",1e5,"Propane[0.5]&Ethane[0.5]") << std::endl; // Default backend is HEOS
std::cout << PropsSI("Dmolar","T",298,"P",1e5,"HEOS::Propane[0.5]&Ethane[0.5]") << std::endl;
std::cout << PropsSI("Dmolar","T",298,"P",1e5,"REFPROP::Propane[0.5]&Ethane[0.5]") << std::endl;
return 0;
-如果您有问题,我可以将项目上传给您。编辑 1:
我的意思是“CoolPropLib.h”而不是“CoolProp.h”,我更正了;在您的问题中,您将其命名为“CoolProp.h”。 正如您在评论中提到的那样;您可以在 Properties->c/c++ ->Advanced 中将调用约定更改为 _stdcall。【讨论】:
它对我有用。我包含 CoolPropLib.h 并将调用约定更改为 Properties->c/c++ ->Advanced 中的 _stdcall。非常感谢 @SelvaKumar:不客气。我修改了答案。 正如我在回复中提到的,使用 DLL 并不是最佳选择,因为您可以使用的功能受到限制。最好按照我的描述自己构建静态库。【参考方案2】:我是 CoolProp 的主要开发人员之一。感谢@houssam 的有用回复。走 DLL(共享库)路线的问题是您无法访问许多有用的低级函数,而如果您链接到静态库,您仍然可以访问所有低级代码
更好的计划是自己构建静态库,因为要求用于构建静态库的编译器与用于编译项目的编译器完全相同。为此,您可以按照此处的说明进行操作:http://www.coolprop.dreamhosters.com:8010/sphinx/coolprop/wrappers/StaticLibrary/index.html#static-library,基本上您需要这样做
# Check out the sources for CoolProp
git clone https://github.com/CoolProp/CoolProp --recursive
# Move into the folder you just created
cd CoolProp
# Make a build folder
mkdir build && cd build
# Build the makefile using CMake
cmake .. -DCOOLPROP_STATIC_LIBRARY=ON -G "Visual Studio 10 2010"
# Make the static library
cmake --build .
然后您需要按照@houssam 的描述链接静态库。不需要对您的代码进行任何其他更改。
将来,coolprop-users@googlegroups.com 邮件列表或https://github.com/CoolProp/CoolProp/issues 是提问的好地方。
【讨论】:
以上是关于在 VS2010 中,VC++ 错误 LNK 2019 with CoolProp 5.0.0的主要内容,如果未能解决你的问题,请参考以下文章
VS2008 VC++/MFC 出错LNK2001与1120
解决VS2010链接错误:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏