我对静态和动态链接库以及.lib和.dll文件有些困惑。
我有一个包含两个库的项目,一个是我自己构建的,另一个来自开源库。
我自己构建的是同一解决方案中的一个单独项目(Visual Studio 2015,C ++),我不需要复制.lib文件或为可执行文件创建DLL来构建和运行
对于其他开源库,我需要将.lib文件和DLL复制到可执行文件夹中。但是,我认为可以静态链接.lib文件而不必复制DLL。
这是否意味着我需要以不同方式编译开源库?比如将 __ declspec(dllexport)更改为__declspec(dllimport)?或者在编译器选项中将 / mD更改为/ mT ?
我尝试了这两种方法,但它仍然说它不能在没有.dll的情况下开始
或者我可以通过更改可执行项目中的设置来静态链接此库吗?如果是这样,这些设置是什么?
编辑:我知道这是一个可以在谷歌上查找的标准问题,但我暂时无法找到确切的答案。主要是,我对需要更改的设置感到困惑,并且需要更改哪个项目。(库或可执行文件)。我假设静态链接意味着库内置于可执行文件中,动态链接意味着库需要位于单独的文件中,如果这不正确,请告诉我。否则,我需要知道如何将库构建到可执行文件中。
我可以继续更改开源库中的构建选项,我已经尝试过了。
谢谢, -D
答案 0 :(得分:0)
我必须更改"静态库"的设置。对于所有配置,不仅仅是Debug,尽管它是在Debug中构建的。不确定是什么导致了这一点。可能是因为库的调试和发布版本设置为相同的文件夹,它可能在构建时用发布版本覆盖调试版本
答案 1 :(得分:-1)
在Windows中,dll文件(动态链接库)需要与应用程序位于同一目录中,或者位于搜索路径中。 lib文件(静态库)需要在链接期间静态链接(构建应用程序的最后一步)。它在Windows中很常见,所以有一个库附带一个dll和lib文件。在这种情况下,lib文件是一个导入库,包含轻松链接到dll所需的信息。
将dll文件放在构建应用程序的位置,并与lib文件静态链接。转到'项目 - >属性 - >链接 - >输入 - >其他依赖关系'和'项目 - >属性 - >链接 - >一般 - >其他库目录'指定要链接的静态库。
编辑:我似乎误解了这个问题。问题是如何将动态库重新编译为静态库。您需要使用您正在使用的库的源代码以及Visual Studio Project文件。打开库并在`Project-> Properties-> General-> Configuration Type'将其从动态库更改为静态库。
请注意,动态库使用Linker属性组,而静态库使用Librarian属性组。在这些类型之间切换可能会导致项目丢弃必要的链接器标志选项。由于每个图书馆都不同,我无法预测你将要做些什么来解决这个问题。确保备份项目文件,以便查看原始选项和标记。