0

I am trying to compile a sample code using OpenHaptics libraries in Visual Syudio 2010. I linked the multi-threaded C-runtime, and the libraries through Project Properties -> Linker -> Input. And included the directories as well. The file.dll is in the system file. But when I try to build the same errors come.

Haptics.obj : error LNK2019: unresolved external symbol __imp__hlEndFrame@0 referenced in function "void __cdecl display(void)" (?display@@YAXXZ)
hdu.lib(hduError.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) public: int __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::sputn(char const *,int)" (__imp_?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPBDH@Z) referenced in function "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl std::operator<<<struct std::char_traits<char> >(class std::basic_ostream<char,struct std::char_traits<char> > &,char const *)" (??$?6U?$char_traits@D@std@@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z)
MSVCRT.lib(crtexew.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup

Is it possible that the libraries are meant to be running in Windows XP and not in Windows 7? Or is there something else I am missing? I am new to C. Any help would be greatly appreciated.

#include <stdio.h>
#include <stdlib.h>

#if defined(WIN32)
# include <windows.h>
#endif

#if defined(WIN32) || defined(linux)
# include <GL/glut.h>
#elif defined(__APPLE__)
# include <GLUT/glut.h>
#endif

// Header files for OpenHaptics.
#include <HL/hl.h>
#include <HDU/hduError.h>

// id needed for haptic shape.
HLuint gMyShapeId;

void display(void) 
{
    // Start a haptic frame.
    hlBeginFrame();

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);

// Start the haptic shape.
hlBeginShape(HL_SHAPE_DEPTH_BUFFER, gMyShapeId);
glBegin(GL_POLYGON);
glVertex3f(0.25, 0.25, 0.0);
glVertex3f(0.75, 0.25, 0.0);
glVertex3f(0.75, 0.75, 0.0);
glVertex3f(0.25, 0.75, 0.0);
glEnd();

// End the haptic shape.
hlEndShape();

// End the haptic frame.
hlEndFrame();
}

void init(void)
{
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);

// Enable depth buffering to provide depth information for OpenHaptics.
glDepthFunc(GL_LEQUAL);
glEnable(GL_DEPTH_TEST);

// OpenHaptics setup follows:

// Create a haptic device instance.
HDErrorInfo error;
HHD hHD = hdInitDevice(HD_DEFAULT_DEVICE);
if (HD_DEVICE_ERROR(error = hdGetError()))
{
    hduPrintError(stderr, &error, "Failed to initialize haptic device");
    fprintf(stderr, "Press any key to exit");
    getchar();
    exit(-1);
}

if (HD_SUCCESS != hdGetError().errorCode)
{
    fprintf(stderr, "Erorr initializing haptic device.\nPress any key to exit");
    getchar();
    exit(-1);
}

// Create a haptic rendering context and activate it.
HHLRC hHLRC = hlCreateContext(hHD);
hlMakeCurrent(hHLRC);

// Reserve an id for the shape
gMyShapeId = hlGenShapes(1);

// Specify the boundaries for the workspace of the haptic device
// in millimeters in the cordinates of the haptic device.
// The haptics engine will map the view volume to this workspace
hlWorkspace (-80, -80, -70, 80, 80, 20);

// Specify the haptic view volume (in this case it will be
// the same as the graphic view volume).
hlMatrixMode(HL_TOUCHWORKSPACE);
hlLoadIdentity();
hlOrtho (0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}

void glutMenu(int ID)
{
    switch(ID) {
        case 0:
            exit(0);
            break;
    }
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(250, 250);
    glutInitWindowPosition(100, 100);
    glutCreateWindow("Hello Haptics");
    glutCreateMenu(glutMenu);
    glutAddMenuEntry("Quit", 0);
    glutAttachMenu(GLUT_RIGHT_BUTTON);
    init();
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}    
valiano
  • 16,433
  • 7
  • 64
  • 79
  • Ok, I tried to run it on Windows XP and it helped, but not that much, this new error is comming up: hdu.lib(hduError.obj) : error LNK2019: unresolved external symbol "__declspec(dllimport) public: int __thiscall std::basic_streambuf >::sputn(char const *,int)" (__imp_?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPBDH@Z) referenced in function "class std::basic_ostream > & __cdecl std::operator<< >(class std::basic_ostream > &,char const – Victor Arnez Apr 18 '11 at 15:59

1 Answers1

1

I'm also having this problem running the example files in Visual C++ Express 2010. I installed Visual C++ 2008 Express Edition and the examples seems to compile. Except you do have to create release code not debug. Not really a solution but it seems to work.

Tim Brooke
  • 11
  • 1
  • Meant to say that I'm doing all of this in Windows 7. – Tim Brooke Aug 19 '11 at 12:45
  • Thank you Tim. Working deeper in the error, I found out that the OpenHaptics tutorial wasn't complete in terms of the libraries, and some extra libraries were needed to be linked to the project in order to run it properly. However, some of the headers in the tutorial weren't fully compatible with the software I was using (MVS Express 2010 on Windows 7), but in the end I was able to not use the methods that needed those particular headers. Lucky I. – Victor Arnez Aug 31 '11 at 22:13