C++ 链接错误 LNK2019

标签 c++ visual-studio-2005 linker

谁能帮我配置 Visual Studio 2005(如果这是问题的解决方案)。我正在使用一些外部库,但出现此错误:

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

我已经用谷歌搜索了几个小时。拜托,stackoverflow 是我最后的希望!

对不起,我忘了包含代码:

#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;
}

最佳答案

我认为您要导入的库 (hdu.lib) 是使用不同的运行时库构建的 - 您要么在此处混合调试和发布库,要么是静态与 DLL 运行时。

关于C++ 链接错误 LNK2019,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2109445/

相关文章:

c++ - 如何连接标题中的字符串?

c++ - 当前的 x86 架构是否支持非临时加载(来自 "normal"内存)?

visual-studio-2005 - VS2005和Windows CE 6.0调试

c++ - linux 链接到 .so ,但仍然得到 undefined reference

c++ - 模板替换在调试构建中失败,但在优化构建中工作?

c++ - 编译一个独立的静态可执行文件

java - 如何使 C++ 客户端信任所有 X.509 证书而不进行任何验证(就像在 Java 中一样)

未找到 C++ 成员声明

visual-studio-2005 - Visual Studio 2005 中的重复行命令?

c++ - 从 Visual Studio 2005 升级到 Visual Studio 2008 的陷阱