Lnk2019未解析的外部引用,但链接器检查正确的库

时间:2015-02-01 19:10:37

标签: c++ visual-studio linker-errors lnk2019

我正在尝试使用软件开发工具包来控制cMOS相机。包含控制摄像机的所有功能的库称为atcorem.lib。我一直在尝试编译和链接SDK中包含的示例文件,该文件应该打印相机的序列号。

我在Visual Studio 2013控制台项目中进行了设置,包括将项目指向其他包含目录,以及链接到其他库目录和附加依赖项。我的代码如下所示:

#include "stdafx.h"
#include "atcore.h"
#include <iostream> 

using namespace std;

int main(int argc, char* argv[])
{
    int i_retCode;
    cout << "Initialising ..." << endl << endl;
    i_retCode = AT_InitialiseLibrary();
    if (i_retCode != AT_SUCCESS) {
        cout << "Error initialising library" << endl << endl;
    }
    else {
        AT_64 iNumberDevices = 0;
        AT_GetInt(AT_HANDLE_SYSTEM, L"Device Count", &iNumberDevices);
        if (iNumberDevices <= 0) {
            cout << "No cameras detected" << endl;
        }
    }
    AT_FinaliseLibrary();
    return 0;
}

当我尝试构建时,程序编译,但我收到三个lnk2019未解析的外部依赖项错误。

1>ConsoleApplication1.obj : error LNK2019: unresolved external symbol _AT_InitialiseLibrary@0 referenced in function _main
1>ConsoleApplication1.obj : error LNK2019: unresolved external symbol _AT_FinaliseLibrary@0 referenced in function _main
1>ConsoleApplication1.obj : error LNK2019: unresolved external symbol _AT_GetInt@12 referenced in function _main
1>C:\Users\CAMERA1\Documents\Visual Studio 2013\Projects\ConsoleApplication1\Debug\ConsoleApplication1.exe : fatal error LNK1120: 3 unresolved externals 

从链接器使用/ Verbose选项,我知道它在尝试解析函数时会查看atcorem.lib,但似乎没有在那里找到它们。

Unused libraries:
1>    C:\Users\CAMERA1\Desktop\temp\SDK3\atcorem.lib
1>    C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x86\user32.lib

从搜索网络和各种论坛,我了解到C ++调用约定有时会导致问题。这对我来说是新的,所以我试着和他们一起玩,以了解这是否是一个问题。 atcorem.h头文件使用WINAPI,我可以从_fun @格式看到链接器正在寻找__stdcall这些函数。

在atcorem.h中,这看起来像

#if defined(__WIN32__) || defined(_WIN32)
#include <windows.h>
#define AT_EXP_CONV WINAPI
#else 
#define AT_EXP_CONV
#endif

int AT_EXP_CONV AT_ex_format_function();

根据WINAPI使用__stdcall的声明,这似乎没问题。

我有更多关于使用dumpbin的atcorem.lib的信息,如果有帮助我可以提供。

非常感谢任何帮助。谢谢!

edit:dumpbin输出的一部分。 edit2:在desktop / temp / SDK3目录中转储atcorem.lib的副本。

Microsoft (R) COFF/PE Dumper Version 12.00.21005.1
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file C:/Users/Camera1/Desktop/temp/SDK3\atcorem.lib

File Type: LIBRARY

Archive member name at 8: /               
54B6F19F time/date Wed Jan 14 17:45:51 2015
     uid
     gid
   0 mode
 862 size
correct header end

89 public symbols

 114E __IMPORT_DESCRIPTOR_atcore
 1374 __NULL_IMPORT_DESCRIPTOR
 14AA atcore_NULL_THUNK_DATA
 2322 AT_QueueBuffer
 2322 __imp_AT_QueueBuffer
 27CC AT_WaitBuffer
 27CC __imp_AT_WaitBuffer
 16CC AT_FillBufferMode
 16CC __imp_AT_FillBufferMode
 1E5A AT_InitialiseLibrary
 1E5A __imp_AT_InitialiseLibrary
 173A AT_FinaliseLibrary
 173A __imp_AT_FinaliseLibrary

...

0 个答案:

没有答案