无法链接静态库C ++

时间:2008-10-21 23:23:47

标签: c++ static linker

我已经想出如何设置VC ++来将代码编译成.lib文件而不是.exe文件,但是我无法将lib与我的其他.obj文件链接在一起。

以下是我如何设置库和应用程序文件夹的方法。 (我不确定这是不对的)

AppFolder
  App.sln
  App.ncb
  *.h
  *.cpp
  Debug
    *.obj
    App.exe

和硬盘上的其他地方......

LibraryFolder
  lib
    Library.lib
  include
    LibrarySolutionFolder
      Library.sln
      Library.ncb
      *.h
      *.cpp
      Debug
        *.obj
        Library.lib

我一直在#include我的应用程序的cpp文件中的库* .h文件,一切都编译好了。它只是在链接时我得到了所有.lib的列表 正在搜索的文件,即使我在VC ++目录中列出了Library.lib,它也不在那里。 我怎样才能将其链接起来? (我是否正确构建了库文件夹?)

5 个答案:

答案 0 :(得分:10)

在项目属性上:

配置属性 - >链接器 - >输入 - >额外的依赖

将其添加到那里。

或者,在库的.h文件中,添加:

#pragma comment(lib, "Library")

这将自动为您完成。

答案 1 :(得分:3)

VC ++目录是链接期间要搜索的目录位置列表。它不是要链接的库列表。

您需要将lib文件添加到 项目链接器 设置的 附加依赖关系 字段。< / p>

答案 2 :(得分:1)

要链接到库,您可以:

  • 在项目中列出 - &gt;属性...-&gt;链接器,输入 - >附加依赖性  (VC ++目录只允许您使用.lib名称而不是完整路径),
  • 将库项目添加到您的应用中。解决方案(在解决方案中,右键单击 - &gt;添加 - &gt;现有项目...),然后使用项目 - &gt; Project Dependancies ...,然后检查您的库项目(确保在下拉列表中选择了应用程序项目)。如果您正在编辑这两个项目,这可能是最好的方法,因为如果库在构建应用程序之前已经更改,VC ++将重建库。
  • 如果您确定只使用VC ++,

      #pragma comment(lib,"C:\\path\\to\\library.lib")`
    

    (谢谢@Nils)

注意:将库解决方案文件夹放在“include”目录中似乎很奇怪:这些文件实际上是用于* .h(或其他#include d文件)。

答案 3 :(得分:1)

从命令行:

  

cl / EHsc {objfiles} + / link   / LIBPATH:LibraryFolder Library.lib

其中{objfiles} +表示一个或多个对象或cpp文件。

答案 4 :(得分:0)

如果包含头文件,VC不会简单地链接库。

您必须告诉链接器使用该库。理由很充分:您已经在库文件夹中拥有数千个库。如果MSVC每次链接你的程序时都必须搜索所有这些程序,那么它将不得不涉及几兆字节的数据。

这需要一段时间,因此默认情况下不会这样做。

对于VC,您还可以提示源中的链接器。为此,您可以在源代码中的某处添加以下行(lib的标题可能是一个好地方)。

#pragma comment(lib,"c:\\path_to_library\\libname.lib")

这不是平台独立,而是使用MSVC自动链接到项目的lib的最便捷方式。

另一种方法是简单地将链接器添加到项目设置中。可以在项目的链接器设置中找到相关信息。不要忘记将lib添加到发布和调试配置中。