具体而言,警告包括:
4>Comctl32.lib(COMCTL32.dll) : warning LNK4006: __NULL_IMPORT_DESCRIPTOR already defined in d3d11.lib(d3d11.dll); second definition ignored
4>D3DCompiler.lib(D3DCOMPILER_47.dll) : warning LNK4006: __NULL_IMPORT_DESCRIPTOR already defined in d3d11.lib(d3d11.dll); second definition ignored
4>dwmapi.lib(dwmapi.dll) : warning LNK4006: __NULL_IMPORT_DESCRIPTOR already defined in d3d11.lib(d3d11.dll); second definition ignored
从我在网上读到的内容来看,这意味着我不止一次链接了d3d11.lib
。
我所做的是将Comctl32.lib
D3DCompiler.lib
d3d11.lib
和dwmapi.lib
链接到一个静态库,然后在另一个可执行文件中链接该静态库(没有其他内容)。警告只在构建静态库时出现,在构建可执行文件时不会出现。我知道这可能不会影响任何事情,但最好是删除所有警告。
我正在使用Visual Studio和Premake生成的解决方案。Premake方面不应该有任何更改,因为前面提到的库只是在属性页的“附加依赖项”字段中列出。我已检查可执行文件的“附加依赖项”字段中没有列出任何内容。
我知道我可能没有包含足够多的信息来最终解决这个问题,但任何提示,以指出我正确的方向将是伟大的。谢谢!
1条答案
按热度按时间bqujaahr1#
尽管 Microsoft Visual Studio 允许通过Librarian属性页将静态库链接到其它静态库,但执行此操作时,LNK 4006错误是不可避免的。
为每个配置和平台编译静态库。
在可执行项目属性中:
C/C++ -常规-附加包含目录
链接器-常规-其他库目录
链接器-输入-其他依赖项
现在,您可以编译项目,而不会出现LNK 4006警告。
注意:必须为每个配置和平台重复Linker属性。