在Visual Studio 2012中,Librarian和Linker有什么区别?

时间:2014-02-25 20:57:05

标签: c++ visual-studio-2012 c++-cli

我正在配置我的项目以使用x86和x64位进行构建,为此,我必须为不同的配置更改目标计算机。

我试图找到为我的原生C ++库设置目标机器的位置,我找到了this post

但是我在Native C ++ Library项目中没有链接器,我有“配置属性 - > 链接器 - >高级 - >目标仅在C ++ / CLI项目中的“机器”选项。

在Native C ++ Library项目中,我有一个“ Librarian ”部分。我搜索了一下,发现目标机器在:配置属性 - > 图书馆员 - >一般 - >目标机器。

图书管理员部分的选项似乎比Linker少。

图书馆员链接器部分是否相同?在我在谷歌搜索的文档中,我只看到链接器

也许我的配置错了?或者在这个post中,答案没有提到Native C ++?

2 个答案:

答案 0 :(得分:9)

  

图书管理员和链接器部分是否相同?在我在谷歌搜索的文档中,我只看到了Linker提到的。

它们几乎相同。当您的项目将成为静态库时,将启用选项 Librarian 。选项链接器适用于可执行文件和动态(链接)库(dll)。

动态库将动态链接到您正在构建的可执行文件,这意味着dll必须在执行时出现。另一方面,静态库将是可执行文件的一部分。静态库不能链接到某个动态库,因为应该在生成可执行文件时完成链接。否则会引起歧义。这就是图书馆员选择减少的原因。 (例如,没有输入选项)。

  

也许我的配置错了?或者在这个post中,答案没有提到Native C ++?

来自链接post的项目生成一个dll(动态链接库),而不是静态库。检查配置属性 - >中的设置。一般 - >配置类型

答案 1 :(得分:4)

您在创建静态库项目时会看到Librarian部分。请注意,这样的项目与不兼容与使用/ clr选项构建的代码,托管代码在运行时链接,而不是构建时。尝试使用此类.lib文件时,在尝试构建程序集时很难诊断链接器错误。如果你将它用于纯本机代码,没有/ clr生效的类型,这是可以的。

.lib文件很少,它只是一包.obj文件。将其视为具有cr * ppy压缩率的.zip存档。 lib.exe实用程序可以从.lib中添加和删除.obj和.lib文件,将其视为winzip。

因此,“常规”部分确实设置的设置非常少,而且lib.exe并不多。几乎是与lib.exe采用的command line options的一对一映射。 / MACHINE选项(也称为目标机器设置)不是必需的,它由您使用的编译器修复。它记录为:

  

但是,在某些情况下,LIB无法确定计算机类型并发出错误消息。如果发生此类错误,请指定/ MACHINE。

所以抓住这个想法。它完全被您用于项目的平台选择所锁定。 VS中的标准版本是Win32,用于生成32位代码,x64用于生成64位代码。