2

Can anybody please help me to configure Visual Studio 2005 (if that's the solution to the problem). I'm using some external libs and I'm getting this error:

1>Compiling...
1>main.cpp
1>c:\documents and settings\mz07\desktop\project\vs8test1\vs8test1\main.cpp(99) : warning C4996: 'getch' was declared deprecated
1> c:\program files\microsoft visual studio 8\vc\include\conio.h(145) : see declaration of 'getch'
1> Message: 'The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details.'
1>c:\documents and settings\mz07\desktop\project\vs8test1\vs8test1\main.cpp(110) : warning C4996: 'getch' was declared deprecated
1> c:\program files\microsoft visual studio 8\vc\include\conio.h(145) : see declaration of 'getch'
1> Message: 'The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details.'
1>c:\documents and settings\mz07\desktop\project\vs8test1\vs8test1\main.cpp(128) : warning C4996: 'getch' was declared deprecated
1> c:\program files\microsoft visual studio 8\vc\include\conio.h(145) : see declaration of 'getch'
1> Message: 'The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details.'
1>Compiling manifest to resources...
1>Linking...
1>hdu.lib(hduError.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,char const *)" (__imp_??6std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z) referenced in function "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(class std::basic_ostream<char,struct std::char_traits<char> > &,struct HDErrorInfo const &)" (??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@ABUHDErrorInfo@@@Z)
1>C:\Documents and Settings\mz07\Desktop\project\vs8Test1\Debug\vs8Test1.exe : fatal error LNK1120: 1 unresolved externals

I've been googling it for hours. PLEASE, stackoverflow is my last hope!

Sorry I forgot to include the code:

#include "atl/stdafx.h"
#include <cstdio>
#include <cassert>
#if defined(WIN32)
# include <conio.h>
#else
# include "conio.h"
#endif
#include <HD/hd.h>
#include <HDU/hduVector.h>
#include <HDU/hduError.h>
#pragma comment(lib, "hdu.lib")
#pragma comment(lib, "hlu.lib")
#pragma comment(lib, "hd.lib")
#pragma comment(lib, "hl.lib")
/*******************************************************************************
Haptic sphere callback. 
The sphere is oriented at 0,0,0 with radius 40, and provides a repelling force 
if the device attempts to penetrate through it. 
*******************************************************************************/
HDCallbackCode HDCALLBACK FrictionlessSphereCallback(void *data)
{
 const double sphereRadius = 40.0;
 const hduVector3Dd spherePosition(0,0,0);
// Stiffness, i.e. k value, of the sphere. Higher stiffness results
// in a harder surface.
const double sphereStiffness = .25;
hdBeginFrame(hdGetCurrentDevice());
// Get the position of the device.
hduVector3Dd position;
hdGetDoublev(HD_CURRENT_POSITION, position);
// Find the distance between the device and the center of the
// sphere.
double distance = (position-spherePosition).magnitude();
// If the user is within the sphere -- i.e. if the distance from the user to 
// the center of the sphere is less than the sphere radius -- then the user 
// is penetrating the sphere and a force should be commanded to repel him 
// towards the surface.
if (distance < sphereRadius)
{
 // Calculate the penetration distance.
 double penetrationDistance = sphereRadius-distance;
 // Create a unit vector in the direction of the force, this will always 
 // be outward from the center of the sphere through the user's 
 // position.
 hduVector3Dd forceDirection = (position-spherePosition)/distance;
 // Use F=kx to create a force vector that is away from the center of 
 // the sphere and proportional to the penetration distance, and scsaled 
 // by the object stiffness. 
 // Hooke's law explicitly:
 double k = sphereStiffness;
 hduVector3Dd x = penetrationDistance*forceDirection;
 hduVector3Dd f = k*x;
 hdSetDoublev(HD_CURRENT_FORCE, f);
}
hdEndFrame(hdGetCurrentDevice());
HDErrorInfo error;
if (HD_DEVICE_ERROR(error = hdGetError()))
{
 hduPrintError(stderr, &error, "Error during main scheduler callback\n");
 if (hduIsSchedulerError(&error))
 {
 return HD_CALLBACK_DONE;
 } 
}
return HD_CALLBACK_CONTINUE;
}
/******************************************************************************
main function
Initializes the device, creates a callback to handle sphere forces, terminates
upon key press.
******************************************************************************/
int main(int argc, char* argv[])
{
HDErrorInfo error;
// Initialize the default haptic device.
HHD hHD = hdInitDevice(HD_DEFAULT_DEVICE);
if (HD_DEVICE_ERROR(error = hdGetError()))
{
 hduPrintError(stderr, &error, "Failed to initialize haptic device");
 fprintf(stderr, "\nPress any key to quit.\n");
 getch();
 return -1;
}
// Start the servo scheduler and enable forces.
hdEnable(HD_FORCE_OUTPUT);
hdStartScheduler();
if (HD_DEVICE_ERROR(error = hdGetError()))
{
 hduPrintError(stderr, &error, "Failed to start scheduler");
 fprintf(stderr, "\nPress any key to quit.\n");
 getch();
 return -1;
}
// Application loop - schedule our call to the main callback.
HDSchedulerHandle hSphereCallback = hdScheduleAsynchronous(
 FrictionlessSphereCallback, 0, HD_DEFAULT_SCHEDULER_PRIORITY);
printf("Sphere example.\n");
printf("Move the device around to feel a frictionless sphere\n\n");
printf("Press any key to quit.\n\n");
while (!_kbhit())
{
 if (!hdWaitForCompletion(hSphereCallback, HD_WAIT_CHECK_STATUS))
 {
 fprintf(stderr, "\nThe main scheduler callback has exited\n");
 fprintf(stderr, "\nPress any key to quit.\n");
 getch();
 break;
 }
}
// For cleanup, unschedule our callbacks and stop the servo loop.
hdStopScheduler();
hdUnschedule(hSphereCallback);
hdDisableDevice(hHD);
return 0;
}
Timo Geusch
24.4k5 gold badges55 silver badges71 bronze badges
asked Jan 21, 2010 at 13:21
1
  • If you want help, you should post code too! Commented Jan 21, 2010 at 13:26

3 Answers 3

2

I think the library you're importing (hdu.lib) is built with a different runtime library - either you're mixing debug and release libraries here or static vs DLL runtimes.

answered Jan 21, 2010 at 13:44
Sign up to request clarification or add additional context in comments.

3 Comments

I am new to c++ and visual studio. Do you mean I set wrong parameters to project configuration? Could you please point where exactly should I look at. Thanks a lot
This is a very good point. Often people who distribute libraries prefer to link with the runtime statically, as it prevents them from having to distribute (and support) Microsoft DLLs.
This worked for me with this library. Just recompiled the library and it worked
0

It looks to me like you aren't linking in the C++ library. If you right-click on your project's "properties", and check Configuration Properties -> Linker -> Input, does your "Additional Dependencies" line include "libcpmt.lib" ?

answered Jan 21, 2010 at 13:46

Comments

0

It'd help if you could post the commandline switches the linker is running, by that I mean the full command.

It looks like this hdu libarary has a dependency on the C++ iostream library, can you check if your linker settings are specifying the iostream library.

answered Jan 21, 2010 at 13:47

2 Comments

/OUT:"C:\Documents and Settings\mz07\Desktop\project\vs8Test1\Debug\vs8Test1.exe" /INCREMENTAL /NOLOGO /MANIFEST /MANIFESTFILE:"Debug\vs8Test1.exe.intermediate.manifest" /NODEFAULTLIB:"msvcrt.lib" /DEBUG /PDB:"c:\Documents and Settings\mz07\Desktop\project\vs8Test1\debug\vs8Test1.pdb" /SUBSYSTEM:CONSOLE /MACHINE:X86 /ERRORREPORT:PROMPT libcpmt.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
This entry: /NODEFAULTLIB:"msvcrt.lib" is a big warning flag for me - you're excluding the release C++ runtime inside a debug build, which suggests that you are mixing debug and release builds. This is generally not a good idea.

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.