Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 如何使用CMake生成vs项目,该项目链接到一些.dll文件_Visual Studio_Cmake - Fatal编程技术网

Visual studio 如何使用CMake生成vs项目,该项目链接到一些.dll文件

Visual studio 如何使用CMake生成vs项目,该项目链接到一些.dll文件,visual-studio,cmake,Visual Studio,Cmake,我使用Cmake生成VS项目,基于 if(WIN32) MESSAGE(WINDOWS) LINK_LIBRARIES(${***_Test_SOURCE_DIR}/../../Build/Win32/Release/***.dll) else(WIN32) MESSAGE(POSIX) LINK_LIBRARIES(${***_Test_SOURCE_DIR}/../../Build/POSIX/lib***.so) endif(WIN32) 但是当我打开生成

我使用Cmake生成VS项目,基于

if(WIN32)
    MESSAGE(WINDOWS)
    LINK_LIBRARIES(${***_Test_SOURCE_DIR}/../../Build/Win32/Release/***.dll)
else(WIN32)
    MESSAGE(POSIX)
    LINK_LIBRARIES(${***_Test_SOURCE_DIR}/../../Build/POSIX/lib***.so)
endif(WIN32)
但是当我打开生成的项目时,构建并抛出它

\***.dll : fatal error LNK1107: invalid or corrupt file: cannot read at 0x2B0
有人有想法吗

如果不使用CMake,如何在VS项目中添加外部dll(不引用某些项目)文件。有什么严格的步骤我可以遵循吗

谢谢

  • 在Windows上,您需要针对.lib而不是.dll进行链接,这很愚蠢,但Microsoft对静态库和动态库使用相同的.lib扩展名。在
    ${***\u Test\u SOURCE\u DIR}/./../Build/Win32/Release/
    中应该有
    ***.lib

    LINK_LIBRARIES(${***_Test_SOURCE_DIR}/../../Build/Win32/Release/***.lib)
    
  • 如果不是这样,您可以按照本文从
    .dll
    构建
    .lib
    :。在VS命令提示符内简要说明(摘自):

    dumpbin /exports C:\yourpath\yourlib.dll
    
这将向控制台打印相当多的文本。但是,我们只对以下功能感兴趣:

ordinal hint RVA      name

1    0 00017770 jcopy_block_row
2    1 00017710 jcopy_sample_rows
3    2 000176C0 jdiv_round_up
4    3 000156D0 jinit_1pass_quantizer
5    4 00016D90 jinit_2pass_quantizer
6    5 00005750 jinit_c_coef_controller
...etc
现在复制所有这些函数名(只有名称!)并将它们粘贴到新的文本文件中。将下一个文件命名为yourlib.def,并将行“EXPORTS”放在其顶部。我的yourlib.def文件如下所示:

EXPORTS
jcopy_block_row
jcopy_sample_rows
jdiv_round_up
jinit_1pass_quantizer
jinit_2pass_quantizer
jinit_c_coef_controller
...
现在,从该定义文件,我们终于可以创建.lib文件了。为此,我们使用“lib”工具,因此请在Visual Studio命令提示符中运行此命令:

lib /def:C:\mypath\mylib.def /OUT:C:\mypath\mylib.lib

你确定这些是有效的.dll文件吗?