In VS2010 ,VC++ error LNK 2019 with CoolProp 5.0.0 - visual-studio-2010

I am an amateur VC++ developer.
I want to use CoolProp (http://www.coolprop.org/) in my academic VC++ project as a static library in a win 32 app using a VS2010 Ultimate running in x64 laptop machine.
So i have downloaded ,
1.CoolProp.lib from http://sourceforge.net/projects/coolprop/files/CoolProp/5.0.2/static_library/
2.CoolProp.h from http://sourceforge.net/projects/coolprop/files/CoolProp/5.0.0/shared_library/
and placed both in a system folder.
Next i created a sample win32 console application in VS2010 as empty sln.
Added CoolProp.h as an Additional Include Directories in Properties->C/C++->General(Also copied all the dependent header files)
Added CoolProp.lib as an Additional Dependencies in Properties->Linker->Input->Additional Dependencies
Then i copied this program from 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;
}
and tried to build.
Build(but compiled perfectly) failed due to
main.obj : error LNK2019: unresolved external symbol "double __cdecl PropsSI(char,char,double,char,double,char *)" (?Props##YANDDNDNPAD#Z) referenced in function _main
Can somebody please help me in resolving this ?
I already read below posts from stackoverflow , but couldnt solve please help
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

It is working for me, (VS 2010) as following:
-add file 'CoolPropLib.h' to your project, by right click on header files folder in solution explorer -> Add -> Existing Item -> choose 'CoolPropLib.h'.
-open file 'CoolPropLib.h' and comment line 22 as follow (//#include "PlatformDetermination.h").
- add these two lines (23, 24) :
#define CONVENTION __stdcall
#define EXTERNC
-use library that is built with __stcall not that built with __cdecel : http://sourceforge.net/projects/coolprop/files/CoolProp/5.0.0/shared_library/Windows/32bit__stdcall_calling_convention/CoolProp.lib/download
-you will need the dll (for __stdcall) from : http://sourceforge.net/projects/coolprop/files/CoolProp/5.0.0/shared_library/Windows/32bit__stdcall_calling_convention/CoolProp.dll/download
-create folder named 'lib' in your project folder in windows explorer (not in VS) and put 'CoolProp.lib' in it.
-in Properties->Linker->General-> Additional libraries Directories, add $(ProjectDir)\lib
-the code I test is:
#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;
}
-if you have problems, I can upload the project to you.
EDIT 1:
I mean 'CoolPropLib.h' not 'CoolProp.h', I correct it; In your question, you named it as 'CoolProp.h'.
As you mentioned in your comment; you can change calling convention as _stdcall in Properties->c/c++ ->Advanced .

I am one of the the primary developers for CoolProp. Thank you #houssam for your helpful reply. The problem with going the DLL (shared library) route is that you lose access to a lot of useful low-level functions, whereas if you link with the static library, you still have access to all the low-level code
The better plan is to build the static library yourself, as it is required that the compiler that is used to build the static library is EXACTLY the same as the compiler used to compile your project. In order to do that, you can follow the directions here: http://www.coolprop.dreamhosters.com:8010/sphinx/coolprop/wrappers/StaticLibrary/index.html#static-library , basically you need to do
# 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 .
You then need to link the static library as described by #houssam. No other changes should be required to your code.
In the future, the coolprop-users#googlegroups.com mailing list or https://github.com/CoolProp/CoolProp/issues are good places to ask questions.

Related

AVX Command Error for integer addition [duplicate]

Im learning to use intrinsics instead of asm-inlining. Yesterday, they were working but I always get error today. Changed nothing.
#include <iostream>
#include <intrin.h> // immintrin.h, smmintrin.h ... tried all, never worked
using namespace std;
int main()
{
_m256_zeroupper(); // __mm256_zeroupper(); does not work too
_mm128 x; // __mm128 x; does not work too
_mm256 y; // __mm256 y; does not work too
_m256_zeroupper(); // __mm256_zeroupper(); does not work too
cout << "Hello world!" << endl;
return 0;
}
Here are the errors. I tried all header files for different intrinsics but errors were same. Also reinstalled gcc but did not work.
Where am I wrong? What do I need to add to actually declare these intrinsic variables and functions?
C:\indirmeDenemesi\hello_intrin\main.cpp||In function 'int main()':|
C:\indirmeDenemesi\hello_intrin\main.cpp|8|error: '_mm256_zeroupper' was not declared in this scope|
C:\indirmeDenemesi\hello_intrin\main.cpp|9|error: '_mm128' was not declared in this scope|
C:\indirmeDenemesi\hello_intrin\main.cpp|9|error: expected ';' before 'x'|
C:\indirmeDenemesi\hello_intrin\main.cpp|10|error: '_mm256' was not declared in this scope|
C:\indirmeDenemesi\hello_intrin\main.cpp|10|error: expected ';' before 'y'|
||=== Build finished: 5 errors, 0 warnings (0 minutes, 0 seconds) ===|
Using 64-bit latest version of gcc on 64bit cpu with 64 bit windows.
CPU is FX8150.
Tried -march=bdver1 -mtune=bdver1 and it produced hundreds of junk error.
Does all these mean my CPU is dying?
Edit: some other projects are working now, but I did not change anything. This must be a project-specific thing.
Using code::blocks and when I right-click on a header and select "open", it gives error "could not find" but does not give any error when compiling related to that, just error for intrinsinc commands. Same for working projects(they compile everything and work, but does not find header files when right click and click open). Maybe some other windows services were interfering? I dont know but compiler errors are vanishing and coming again, time to time. Reinstalling also codeblocks did not solve. Only some projects can use intrinsics while other projects cannot(even if all projects have same headers.)
This code below does not work too.
#include <iostream>
#include <immintrin.h>
using namespace std;
int main()
{
_m256_zeroupper();
__mm128 x;
__mm256 y;
_m256_zeroupper();
cout << "Hello world!" << endl;
return 0;
}
Three things should make your code work:
Make sure you're using the -mavx compile flag.
Your variable should be declared as __m256 not _mm256.
Make sure you're including immintrin.h

Codeblocks: Including library

I am trying to get started with the VJoy virtual joystick, but i am having trouble getting it up and running.
I keep getting this error:
main.cpp|14| undefined reference to `_imp__vJoyEnabled'
I am trying to get it running using the code below.
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include "public.h"
#include "vjoyinterface.h"
using namespace std;
int main()
{
// Get the driver attributes (Vendor ID, Product ID, Version Number)
if (!vJoyEnabled())
{
cout << "Function vJoyEnabled Failed - make sure that vJoy is installed and enabled\n" << endl;
}
cout << "Hello world!" << endl;
return 0;
}
Within Codeblocks i have set the compiler to compile with C++11.
Also within Codeblocks i have linked the library (Project build options -> linker settings -> add library)
I have also tried playing with the Search Directory, but i can't seem to get it working.
Any ideas what i am missing?
I found out i was linking to the wrong locations. Unfortunately there wasn't a clear error indicating this.
So the solution to this problem(in my case):
-Make sure you link to the right library locations
-Move the libraries and all of its associated files inside of the codeblocks project folder
-Add the library to the linked libraries(Project build options -> Linker settings -> Link libraries)
-Add the library locations to the search directories(Project build options -> Search directories -> Linker -> add)

LINK : fatal error LNK1561: entry point must be defined on SystemC on Visual Studio 2015

When trying to build a simple helloworld program, the next error shows up
LINK : fatal error LNK1561: entry point must be defined
I'm trying to use the systemc library in Visual Studio 2015, maybe thats the problem because, I couldn't find any help configuring this VS for systemc only for VS2010. The program is the following:
// All systemc modules should include systemc.h header file
#include "systemc.h"
// Hello_world is module name
SC_MODULE (hello_world) {
SC_CTOR (hello_world) {
// Nothing in constructor
}
void say_hello() {
//Print "Hello World" to the console.
cout << "Hello World.\n";
}
};
// sc_main in top level function like in C++ main
int sc_main(int argc, char* argv[]) {
hello_world hello("HELLO");
// Print the hello world
hello.say_hello();
return(0);
}
The curious thing is that if I exchange the sc_main for main it builds but doesn't work.
Your code is fine so you have a build issue. Check that you are pointing to the correct SystemC include and systemc.lib file.
There are issues with building current SystemC 2.3.1 in Visual Studio 2015. http://forums.accellera.org/topic/5026-microsoft-visual-studio-community-2015/
VS2013 works fine.

Linking to winmm.dll in Visual Studio 2013 Express for mciSendString

I am trying to use mciSendString in visual studio express 2013 (Visual C++) but I keep getting an error
Error 1 error C3861: 'mciSendStringA': identifier not found
I assume this i because I have not linked to the correct dll, but I cannot find any details online or on msdn about how to link to the dll. It seems quite strange that there wouldn't be more obvious documentation about this. Can someone tell me how to link to the dll?
EDIT:
Here is the code I am trying to run:
#include <Windows.h>
#include <iostream>
#include <mmsystem.h>
extern char command1[] = "open C:\\boing.mp3 type MPEGVideo alias 0";
extern char command2[] = "play 0 from 0";
int main()
{
mciSendStringA(command1, NULL, 0, 0);
mciSendStringA(command2, NULL, 0, 0);
}
To make mciSendString() to work, you need to link to winmm.lib.
Just adding winmm.lib to Project Properties > Linker > Input > Additional Dependencies will be fine.
Looking at mmsystem.h (admittedly from the V7.1A Windows SDK, which is the most recent I have installed), I can see that there's a #ifdef _WIN32 block in there. If _WIN32 is not defined, then mciSendStringA is not declared. Instead mciSendString is declared.
Check your project options and ensure that both WIN32 and _WIN32 are defined. I'm guessing that you started from a console project, rather than a Windows Application project, and that at least one of those isn't defined.

Configure OpenCV with GPU support on VS2010

I have tried both VS2010 and VS2008. In the process of trying to configure OpenCV with GPU, I have successfully compiled CUDA codes and OpenCV samples codes seperately.
But when I include the OpenCV libraries in my CUDA environment it doesn't work. The latest problem is when I compile my sample code I get the following exception:
First-chance exception at 0x7c812aeb in test.exe: Microsoft C++
exception: cv::Exception at memory location 0x0011fb18
My code is
/*this is the sample code in opencv website*/
#include "iostream.h"
#include "opencv2/opencv.hpp"
#include "opencv2/gpu/gpu.hpp"
int main (int argc, char* argv[])
{
try
{
cv::Mat src_host = cv::imread("file.png", CV_LOAD_IMAGE_GRAYSCALE);
cv::gpu::GpuMat dst, src;
src.upload(src_host);
cv::gpu::threshold(src, dst, 128.0, 255.0, CV_THRESH_BINARY);
cv::Mat result_host = dst;
cv::imshow("Result", result_host);
cv::waitKey(27);
}
catch(const cv::Exception& ex)
{
std::cout << "Error: " << ex.what() << std::endl;
}
return 0;
}
Any help will be appreciated.
DOn't look at the error box that pops up - look at the console window. OpenCV has error messages that are slightly more descriptive. Tell us what the console says.
I had a similar problem with this same code. I fixed it by
copying opencv_core243d.dll from E:\opencv\build\gpu\x64\vc10\lib folder to the work directory with the .exe.
Don't know why that should matter but it did.
Using cuda 5.0
VS2010 express
win 7 x64
Anyone who might end up here by reference from a google search or similar check out this thread. It may help: OpenCV 2.4.3rc and CUDA 4.2: "OpenCV Error: No GPU support"

Resources