使用cmake编译64的dll

一开始使用cmake --build .来生成了dll,在导入到java项目中使用的时候,才发现是32位的。导致程序不能正常运行,报错如下:

 

Exception in thread "main" java.lang.UnsatisfiedLinkError
Can't load IA 32-bit .dll on a AMD 64-bit platform12

即由于在AMD64的架构下调用了32位的dll文件,导致的安全问题。

看来需要让cmake编译出64位的dll才行啊。

下面分享一种可行的方法:

在介绍之前要先了解一个概念 
cmake有两种编译的方式,一种是使用CMakeLists.txt文件,另一种是使用CMakeCache.txt文件

cmake [option]  指向含有顶级CMakeLists.txt的那个目录
cmake [option]  指向含有CMakeCache.txt的那个目录 
第一种方式用于第一次生成cmake makefile,此后可以在build dir里直接cmake . 注意.表示当前目录,因为当前目录中已经有CMakeCache.txt,所以适用第二种方式。实际上cmake总是先检查指定的build dir中有没有CMakeCache.txt,如果有就按第二种方式处理;如果没有才寻找CMakeLists.txt使用第一种方式处理。

下面介绍方法: 
1. 在CMakeLists.txt文件中添加

 

set(BUILD_USE_64BITS on)1

在你希望的输出目录下 

 

cmake -G "Visual Studio 13 2015 Win64" ..  //这个VS的版本取决于你安装的是哪个版本的VS1

仍然在输出目录下

 

cmake --build .1

构建成功,得到64bit版的dll了。