3

我已经想出了如何设置 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,它也不在那里。我怎样才能得到这个链接?(我是否正确地构建了库文件夹?)

4

5 回答 5

10

关于项目属性:

配置属性 -> 链接器 -> 输入 -> 附加依赖项

把它加进去。

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

#pragma comment(lib, "Library")

这将自动为您完成。

于 2008-10-21T23:32:47.423 回答
3

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

您需要将 lib 文件添加到Project Linker设置的Additional Dependencies字段中。

于 2008-10-21T23:35:56.340 回答
1

要链接到库,您可以:

  • 在 Project-> Properties...->Linker, Input->Additional Dependancies 中列出它(VC++ 目录只允许您使用 .lib 名称而不是完整路径),
  • 将库项目添加到您的应用程序。解决方案(在解决方案上,右键单击 -> 添加 -> 现有项目...),然后使用项目 -> 项目依赖项...,然后检查您的库项目(确保在下拉列表中选择了应用程序项目)。如果您同时编辑这两个项目,这可能是最好的方法,因为如果在构建您的应用程序之前它已更改,VC++ 将重新构建库。
  • 如果你确定你只会使用 VC++,

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

    (感谢@尼尔斯)

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

于 2008-10-21T23:41:08.873 回答
1

从命令行:

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

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

于 2008-10-22T04:37:09.447 回答
0

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

您必须告诉链接器使用该库。有充分的理由:您的库文件夹中已经有数千个库。如果每次链接程序时 MSVC 都必须搜索所有这些,那么它就必须遍历数百兆字节的数据。

这将花费相当长的时间,因此默认情况下不会执行此操作。

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

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

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

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

于 2008-10-21T23:34:25.237 回答