使用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了。