【问题标题】:link static library in c++ visual studio在 C++ Visual Studio 中链接静态库
【发布时间】:2012-09-30 09:08:06
【问题描述】:

谁能帮我理解这个过程。

在 C++ Visual Studio 2010 中

我有一个 Visual Studio 解决方案(我们称之为 mysol)

我有一个作为静态库构建的项目(我们称之为 staticprj) staticprj 需要使用外部的库(我们称之为 ext.lib)

在 staticprj 的源代码主体中,我包含外部库头文件 # 包含 extlib.h 并调用它的一些函数(让它们称为 extfunctions()) 我还包括 ext.lib 的头文件位置的路径。

staticprj 编译正常,没有错误

mysol 还有另一个项目,它是一个动态库 (dynprj),它依赖于 staticprj。

在 dynprj 的源文件中也使用来自外部库的函数。

我在 dynprj 的源代码中包含了#include extlib.h。 我已经包含了头文件的路径 我已将 extlib.h 直接附加到 dynprj 我还在链接器输入中添加了 ext.lib(以及 ext.lib 所在的路径)。

我仍然收到一个 lnk2001 错误,指出未找到 extfunctions()。

如果我根本不使用 ext.lib,整个结构(mysol 解决方案)可以编译。

我的问题是链接过程是如何工作的,我可以做些什么来纠正这个链接错误。

(请注意,在没有 ext.lib 的情况下,我的 staticprj 和 dynprj 链接很好。我的编译工作正常,我的代码工作正常。当我尝试将另一个 ext.lib 链接到 staticprj 和dynprj 和使用 ext.lib 中的函数)

提前致谢。

【问题讨论】:

    标签: c++ visual-studio-2010 static-linking dynamic-linking


    【解决方案1】:

    我不太确定它会起作用,但请尝试将 .dll 放入您的“mysol”调试文件夹中。几周前,当我将库编译为 .dll 时,我遇到了类似的问题。我只是将那个 .dll 放在我的调试文件夹中并且工作得很好。

    【讨论】:

    • 你在说哪个 .dll ?你的意思是我正在使用的外部库 ext.lib 吗?因为最后我正在尝试构建一个使用和外部库 ext.lib 的 dll
    • 您尝试过吗:项目->属性->配置属性->链接器->输入并输入您的“libname.lib”和:...->Conf...->VC++ 目录并在库目录中添加“libname.lib”文件夹的路径。
    • 我以不同的方式做这件事。我在头文件中使用#progma comment(lib, "libraryname")。它有效
    • 你确定 exfuncs() 在那个库中吗?
    猜你喜欢
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    相关资源
    最近更新 更多