我正在尝试使用Visual Studio中的静态库来设置多项目解决方案。

作为一个例子,OtherProject包含类Foo位于foo.h中 ,我想在这个项目MyProject的使用项目。

根据我的理解,要使用静态库完成此操作,我必须:

  1. OtherProject中,将“Configuration Type”更改为“Static library(.lib)”。
  2. MyProject中
    1. 在“Common Properties - > Framwork and Referencees”中添加对OtherProject的新引用
    2. 在“VC ++目录”中
      1. 在“包含目录”中添加OtherProject的头文件的路径。
      2. 在“库目录”中,将路径从OtherProject添加到创建的“OtherProject.lib”。
    3. 在“输入>附加依赖项”中,添加“OtherProject.lib”。 (编辑)此步骤似乎是不必要的,并且在2.1期间隐式进行(感谢@JBentley将其指出)。
  3. 解决方案属性 - > Common Properites - > Project Dependencies”,在下拉列表中选择MyProject并将依赖添加到OtherProject (编辑)这是不必要的,并且在步骤2.1(也是@JBentley)中隐式地进行。

......一切都应该是桃子的。 但是,如果我跳过上面的所有内容并且只包含OtherProject的源文件,如下所示:

  1. MyProject “VC ++目录 - >包含目录”中添加OtherProject头文件的路径(以及可能的源文件?)。

......一切似乎都像以前一样工作,工作少得多。

我在MyProject中的测试文件如下所示:

#include <OtherProject/Foo.h>

int main()
{
    Foo foo;
    return 0;
}

问题

  • 我的“静态库”方法是否有效,或者我以后可能会遇到问题?
  • 第二种方法有效吗? 它会在以后产生问题吗? 我想一个缺点是我无法隐藏lib文件中的部分实现,并且必须提供源代码和头文件而不是lib和头文件。
  • 每种方法都有利弊吗?

(编辑)以下问题是关于类似的问题: 在不获取LNK4006的情况下,在Visual C ++中链接具有依赖项的库 看来Visual Studio很聪明,可以处理我列出的一些步骤,避免不必要的步骤似乎摆脱了“LNK4006第二个定义被忽略”我进一步下线了:

===============>>#1 票数:2 已采纳

我的“静态库”方法是否有效,或者我以后可能会遇到问题?

看起来是对的。 看不到会导致问题的任何事情(除非您开始移动目录等)。

Foo的实现缺乏源代码可能会妨碍调试,使其更难使用。 当然,您始终可以提供源文件和库的调试版本,在这种情况下,此特定问题“消失”。

第二种方法有效吗? 它会在以后产生问题吗? 我想一个缺点是我无法隐藏lib文件中的部分实现,并且必须提供源代码和头文件而不是lib和头文件。

是有效的(从某种意义上说,你可以将其他项目中的其他源代码包含到当前项目中 - 它不再是技术上的“静态库”),是的(用户可能需要将Foo.cpp文件添加到项目以及项目包含的任何其他文件。如果Foo和它的部分是很多文件,这可能是一个主要的缺点。

除了必须提供源之外,还可以增加整个项目的编译时间(至少从头开始构建)。 对于小型项目而言,这可能不是问题,但较大的项目可能需要相当长的时间来构建。

当然,加上Foo类功能的用户可以进入源代码并在出现问题时对其进行调试。

 Is there any pros and cons of each methods? 

我想,上面已回答。

===============>>#2 票数:1

在你没有真正创建静态库的意义上,你的第二种方法并不完全有效。 您只需将OtherProject源放在不同的目录中,但它是作为MyProject一部分构建的。

因此,如果您真的想要创建一个静态库来隐藏实现,那么您必须执行“额外”步骤。 没有捷径。

  ask by Adelost translate from so

未解决问题?本站智能推荐:

1回复

Visual Studio:项目参考与链接静态库

在Visual Studio中,当我想在解决方案中使用现有项目时,可以将其添加为引用,也可以将其添加为其他项目属性中的静态链接库。 当我应该与option一起使用时,我很困惑,这两个方法有什么好处。 PS:谈论C ++项目。
1回复

在Visual Studio项目中使用在vs80(Visual Studio 2005)下编译的C ++静态库在c ++ vs140(Visual Studio 2015)下编译

是否可以在Visual Studio 2015 c ++项目(vs140)中使用通过vs80(Visual Studio 2005)编译的C ++静态库(.lib)? 就类似的问题而言,我发现“我可以在Visual Studio 2008中使用Visual Studio 6编译的C ++静
1回复

从一个Visual Studio项目构建多个版本的静态库

我有几个项目A到F,每个项目都依赖于静态库L.每个项目都在我的visual studio解决方案中。 不幸的是,项目F需要构建一个稍微不同的静态库(目前通过在构建选项中定义预处理程序指令来实现,以使用if / endif指令选择不同的代码段,因为特殊情况代码添加了项目的其他依赖项AE不关心
1回复

如何将.a类型的静态库添加到Visual Studio项目?

我正在尝试在我的项目中使用MathGL 。 当我浏览软件包的内容时,我只能找到.a静态库文件,我该如何使用这些库文件在Visual Studio项目中包括该库? 我试图通过转到项目属性->配置属性->链接器->输入来包含所有.a文件 并使用“附加依赖项”链接所有.
2回复

创建静态库Visual Studio

我试图在Visual Studio中创建一个静态库,其中包含其他源,这些源的路径在“其他包含目录”中定义。 我可以毫无问题地构建和创建该库,但是当我尝试在另一个项目中使用该库时,它似乎不包含“其他包含目录”中定义的源,因此找不到在该路径中指定的源。 静态库在构建时是否不包括该源? 当您
1回复

如何在Visual Studio中查找静态c / c ++库中的哪些函数

我有一个应用程序和一个静态库。 该库似乎构建得很好 - 它肯定编译我的foo和bar和geewhizz函数就好了,并创建静态库而没有任何错误或警告。 但是,当应用程序构建并链接到静态库时,它会设置链接到函数foo和bar但无法找到函数geewhizz 。 我怎么知道geewhizz是否
3回复

C ++ Visual Studio库

有什么方法可以使Microsoft Visual Studio中内置的静态库与使用过的CRT无关(带有调试支持/没有调试支持)? 我的意思是,对于简单的C库,可以使用gcc生成代码,然后在Visual Studio中使用相同的静态库。 生成的library.a文件完全独立于/MT或/MD
3回复

将Visual Studio中的静态库与复合依赖项链接

假设您有两个静态库A和B,使得A引用了B的方法。是否可以将可执行文件静态链接到A和B,以使B中没有被A引用的未解析符号? 这是我的情况: 当我尝试以这种方式在Visual Studio 2010中链接所有内容时,A和B之间存在未解析的符号。但是应用程序和A之间没有。符号所抱怨的符号带
1回复

如何将用C编写的源代码从另一个项目包含到我自己的Visual Studio C ++项目中

我想在Visual Studio中使用Potrace在Windows上进行C ++项目,但我不知道如何将Potrace包含到我的项目中。 我试图使用Cygwin编译C文件,这样创建一个.a文件,然后在visual studio中链接到它,但这不起作用。 Visual Studio能够识别Po
1回复

设置Visual Studio库项目依赖项

在以下情况下,我正在努力寻找在Visual Studio(即2015)中设置依赖项的正确方法: 我有2个项目: 引擎:这是一个静态库项目,取决于我在“图书馆员”,“其他依赖项”部分中指定的glfw,glew和opengl .lib文件。 我还正确添加了include和libs目