2014-02-25 55 views
5

我正在配置我的项目以x86和x64位构建,为了做到这一点,我必须更改不同配置的目标机器。在Visual Studio 2012中,Librarian和Linker有什么区别?

我试图找到为我的本地C++库设置目标机器的位置,并且我找到了this post

但是我没有链接在本地C++库项目,我有“配置属性 - >链接 - >高级 - >目标机”只在C++/CLI项目选项。

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

图书管理员部分似乎有比链接器少的选项。

图书馆员连接器节相同吗?关于我在谷歌搜索的文档,我只看到链接器提到。

也许我有一些配置错误?或者在这post答案没有提到Native C++?

回答

6

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

它们几乎相同。当你的项目将成为一个静态库时,图书管理员已启用。链接器用于可执行文件和动态库(dll)。

虽然动态库将动态链接到您正在构建的可执行文件,这意味着dll必须在执行时执行,静态库将成为可执行文件的一部分。静态库不能链接到某些动态库,因为链接应该在生成可执行文件的时候完成,除此之外它会导致模糊。这就是图书馆员选项减少的原因。 (例如,没有输入选项)。

也许我有一些配置错误?或者在这post答案没有提到Native C++?

他的项目生成一个DLL,而不是一个静态库。检查您的设置配置属性 - >常规 - >配置类型

4

当您创建静态库项目时,您会看到图书管理员部分。请注意,这样的项目是不兼容的与使用/ clr选项构建的代码,托管的代码在运行时链接,而不是生成时间。尝试使用这样的.lib文件在尝试构建程序集时很难诊断链接程序错误。如果您将它用于纯本机代码(没有/ clr生效),那也没问题。

对.lib文件很少,它只是一包.obj文件。把它想成一个。zip压缩率为cr * ppy的压缩文件。 lib.exe实用程序可以将.obj和.lib文件添加到.lib中,并将其从.lib中删除,并将其视为winzip。

因此,在常规部分确实只有很少的设置,lib.exe并没有太多设置。几乎是一个到lib.exe所需的command line options的一对一映射。/MACHINE选项(又名目标机器设置)不是必需的,它由您使用的编译器修复。它被记录为:

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

所以从头开始这个想法。它完全由您用于项目的平台选择所锁定。 VS中的标准代码是Win32来生成32位代码和x64来生成64位代码。

+0

我的静态库是纯粹的C++代码。但是我从C++/CLI项目中使用它们。这可以吗? – Dzyann

+1

是的,这是一个支持和常见的情况。唯一需要注意的是C++/CLI源代码中的#includes,它们可能必须被#pragma包装,以便告诉编译器.h文件包含非托管代码的声明。对于没有明确声明它们是__cdecl的自由函数很重要。当然,你必须告诉链接器链接.lib。 –

相关问题