17

在 C# 中,添加将构建依赖项的项目引用非常简单,将生成的程序集放在原始的 Debug/ 目录中并针对该程序集正确编译。

所以目前,我在一个解决方案中有一个带有 Main() 的项目和一个静态库项目。但是,当我编译 Main() 项目并查看 bin/Debug/ 目录时,我没有找到我认为需要存在的 Static.lib 文件或 .obj 文件,或者其他什么.. . 我收到链接器错误。

我想也许我必须配置项目以找到由静态库项目生成的 .obj 和 .lib 文件(编译得很好,并且实际上生成了这些文件。)

我遗漏了一些东西,而且我不太精通使用 C++ 的 Visual Studio。

如何在 Main 项目中添加引用以使用静态库项目生成的库?

4

5 回答 5

6

您必须了解的第一件事是,静态库与 .NET 程序集完全不同。它们链接到 .exe 中,并且不作为单独的实体分发。

您的链接器错误很可能是您未链接到库的结果。

有几种方法可以定义必须链接的库。一个是链接器 -> 输入 -> 附加依赖项下的项目设置,另一个是通过的廉价路线#pragma comment(lib, "path to library")

于 2013-01-30T16:49:21.153 回答
4

您可以通过进入项目属性->链接器->输入->附加依赖项来添加所需的.lib文件的名称

然后你必须在 VC++ Directories->Library Directory 中提供你的库所在的文件夹。

于 2013-01-30T16:48:47.247 回答
3

这是一个非常全面的答案:visual c++: #include files from other projects in the same solution

它描述了链接器的设置以及引用另一个 C++ 项目时的其他要点。(尤其是来自 C# 但不太精通 C++ 时)

于 2013-10-23T05:12:05.983 回答
0

如果您在同一个解决方案中构建多个项目,请使用项目引用自动将您的库和可执行文件链接在一起:

https://docs.microsoft.com/en-us/visualstudio/msbuild/common-msbuild-project-items?view=vs-2019#projectreference

这在这里解释得很好:

https://milania.de/blog/Project_references_in_Visual_Studio_and_C%2B%2B

这种方法的优点是构建顺序是正确的。正如其他答案中所建议的那样,使用附加依赖项将无法维持正确的构建顺序。

于 2021-05-13T19:31:00.723 回答
0

在 .NET 中,设计目标之一是使这个过程变得更加容易和自动化。任务在那里完成。

在原生 C++ 世界中,该过程更加手动。这大致是我将不同模块连接在一起的过程。

  • 在解决方案中包含所有相关模块。
  • 将每个项目的输出目录设置为同一目录。右键单击每个项目,选择属性,通常将输出目录设置为:$(SolutionDir)\Bin\$(Configuration)\$(PlatformTarget). 为了减少头痛,为所有配置和平台设置此项。然后所有文件将被放置在类似 \your-solution\bin\Debug\x64.
  • 设置项目依赖项 - 右键单击​​将链接到另一个项目的每个项目 -> 选择构建依赖项并选择引用的项目。
  • 通过右键单击调用项目并选择属性来设置链接过程。转到链接器-> 输入并添加: $(SolutionDir)\Bin\$(Configuration)\$(PlatformTarget)\MyLibrary.lib
  • 对于要链接到的实际函数,我将函数声明设置为类似(函数声明有很多变体,有点超出了这里的范围):

#define DllExport __declspec(dllexport)

extern "C" void DllExport WINAPI`Testing();

  • 在调用函数的实际 cpp 文件中,我添加如下内容:

    #include "..\MyLibrary\mylibrary.h"

  • 然后在实际的调用函数中。只需添加被调用函数:

    测试();

于 2020-07-02T11:21:56.483 回答