我已经弄清楚如何设置 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

我已经从我的应用程序的 cpp 文件中 #include 库 *.h 文件,并且一切都编译得很好。就在它链接时,我将获得正在搜索的所有.lib文件的列表,即使我在vc ++目录中列出了它,也不在那里。我怎样才能得到这个链接?(我是否正确构建了库文件夹?)

有帮助吗?

解决方案

在项目属性上:

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

将其添加到那里。

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

#pragma comment(lib, "Library")

这将自动为您完成。

其他提示

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

您需要将lib文件添加到 项目链接器 设置的 其他相关性 字段。

要链接到库,您可以:

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

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

    (谢谢@尼尔斯)

注意:将库解决方案文件夹放在“include”目录中似乎很奇怪:其真正用于 *.h (或其他 #included 文件)。

从命令行:

  

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

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

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

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

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top