【问题标题】:Cannot link to a library no way...VS 2010 lib无法链接到库... VS 2010 lib
【发布时间】:2011-06-19 21:24:45
【问题描述】:

我可以成功构建和使用库。仅当库和其他项目都在同一个解决方案中时,后者才......
我把isam.lib isam.dll isam.exp isam.h 复制到了一个叫lib的文件夹下...

然后我创建了一个新的解决方案..

设置链接器 -> 输入以使用我的 isam.lib ...构建失败,找不到该文件...
将 VC++ 目录包括目录和库目录设置为 lib 文件夹...

构建成功..

我还为 C/C++ 常规设置路径附加包括目录
设置链接器常规附加库目录

构建没问题....

然后我包含我的 isam 文件..

    #include "stdafx.h"
#include <isam.h>

    int _tmain(int argc, _TCHAR* argv[])
    {
        isopen("lamogio",2);
        return 0;
    }

构建失败...

错误 1 ​​错误 LNK2019:函数 _wmain C 中引用的未解析的外部符号“__declspec(dllimport) int __cdecl isopen(char const *,int)”(_imp?isopen@@YAHPBDH@Z) :\Users\Parhs\documents\visual studio 2010\Projects\testdll2\testdll2\testdll2.obj testdll2

错误 2 error LNK1120: 1 unresolved externals C:\Users\Parhs\documents\visual studio 2010\Projects\testdll2\Debug\testdll2.exe 1 1 testdll2

【问题讨论】:

    标签: c++ visual-studio-2010 dll import


    【解决方案1】:

    好吧,假设您告诉链接器使用链接器、输入、附加依赖项设置链接到 isam.lib。那么链接器错误的可能原因是您用 C 编写了 isam 代码,并且您在 C++ 程序中使用它。您必须告诉编译器代码是用 C 编写的:

    #include "stdafx.h"
    extern "C" {
        #include <isam.h>
    }
    

    更典型的解决方案是将它放在 isam.h 文件中,以便它可以以任何方式使用。像这样:

    #ifdef __cplusplus
      extern "C" {
    #endif
    
    // The declarations
    //...
    
    #ifdef __cplusplus
    }
    #endif
    

    【讨论】:

    • 是的,它在 C..问题是它不是由我开始的..我不知道..他是如何将它设置为 C 的!......但是 extern c 做了魔法!!!我不知道为什么解决方案中包含的示例程序没有使用 extern "C" 和工作......我试图创建一个空的 win32 项目但得到了同样的错误.. 有什么技巧可以将其默认设置为 C 吗?我从使用该库的示例中复制了整个小型示例程序,但出现了相同的错误(当不在该解决方案中时!),但是使用 extern 它可以工作....有什么想法吗?
    • Visual Studio 中的项目模板始终默认启用 C++ 编译。这可以通过将源代码文件重命名为 .c 而不是 .cpp 来改变。或者使用 /Tc 编译选项。但是,当你这样做时,你会从预编译的头文件中得到麻烦。我建议您使用此解决方案并继续探索 C++ 编程的狂野世界。
    • 不错的答案。 (汉斯·帕桑特)++
    • 我不知道你在说什么!我尝试不将 extern 更改为 .c,但遇到了很多问题......所以我会坚持使用 extern "C"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 2019-04-25
    • 1970-01-01
    • 2021-11-01
    • 2020-12-13
    • 1970-01-01
    • 2014-10-23
    相关资源
    最近更新 更多