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

cmake生成Win64位工程相关推荐

  1. 使用CMake生成sln项目和VS工程遇到的问题

    2019独角兽企业重金招聘Python工程师标准>>> 用vs运行cmake后的工程 参考:http://zhidao.baidu.com/link?url=AZRxI0jGDzo6 ...

  2. c语言编程题没有sln,使用CMake生成sln项目和VS工程遇到的问题

    用vs运行cmake后的工程 1.单个文件示例: 1) 首先建立文件夹CMakeTest/Src 2) 在文件夹Src中建立两个文件main.c和CMakeLists.txt 3) main.c: # ...

  3. Visual Studio 32位64位的问题和如何编译32位64位工程的问题

    Visual Studio自身没有32位和64位的分别,对于某一个特定的版本只有一个版本安装文件(即不存在32位版本的VS2015安装文件和64位版本的VS2015安装文件) 对于自己开发的工程,编译 ...

  4. CMake 常用总结二:CMake 生成静态库与动态库

    引言 CMake 实践帮助我们对 CMake 有一个系统全面的了解,并且有大量示例以供参考,至少在实际项目中可以让我们有能力看懂并修改项目中现有的 CMake . 阅读完 CMake 实践文档,认为自 ...

  5. openHEVC在Windows下构建vs32/64位工程(vs2013)

    前期准备 yasm:http://yasm.tortall.net/Download.html openHEVC: https://github.com/OpenHEVC/openHEVC SDL2. ...

  6. 使用Cmake生成跨平台项目编译解决方案

    项目最近有需求在windows下面运行,我花了几周时间将linux的服务器移植到windows下面,目前已经能够正常运行服务器,目前又有了新需求,两边的代码结构和组织是分开的,因此为了两边能够同步维护 ...

  7. win10子系统linux下cmake编译32位程序

    文章目录 Ubuntu 18运行32位程序 添加软件源 安装编译环境 编写CMakeLists.txt cmake编译 运行程序 SUSE 15.0运行32位程序 m32编译 添加软件源 安装qemu ...

  8. CMake管理VS+Qt工程

    CMake:是一个比make更高级的编译配置工具,它可以根据不同平台.不同的编译器,生成相应的Makefile或者vcproj项目. 近期使用Visual Studio 2015 建立了Qt工程,不使 ...

  9. 生成24位字符串ID__IdGenerator.java

    此工具类用于生成24位字符串ID,唯一不重复. 直接通过 IdGenerator.get() 获取. 源码如下:(点击下载源码 - IdGenerator.java ) 1 import java.n ...

最新文章

  1. 射影几何笔记4:证明的思路
  2. JAVA面试中问及Hibernate与 Mybatis的对比
  3. ABAP开发中常用的两个F4搜索帮助函数的区别
  4. hdu 1251 统计难题(trie树入门)
  5. 按自己喜欢的方式过一生?
  6. scrapy模拟模拟点击_模拟大流行
  7. entity framework 删除数据库出现错误的解决方法--最土但是很有效的方法
  8. Network 第三篇 - STP生成树协议
  9. 【ECharts教程】在实战中学习(超炫酷的数据可视化大屏)
  10. 条件覆盖,路径覆盖,语句覆盖
  11. html 圣杯布局 高度,web圣杯布局
  12. 网页开发工具VSCode的使用
  13. RSTP配置_思科模拟器
  14. 不会用PS、Excel更改证件照颜色没关系,用Word更改不用1分钟!
  15. 计算机控制面板有何用途,控制面板上面功能都有什么作用
  16. 笔记本Ubuntu安装失败的一般原因
  17. python - re
  18. asset store_在Asset Store上发布成功的产品
  19. 长截图,滚动截图工具推荐
  20. Project3_The_Flower_shop_in_Internet

热门文章

  1. CE下基于Zylonite硬件平台的SD卡驱动开发
  2. WinCE BSP中的DAT文件介绍
  3. 软件oem要注意什么_做化妆品oem,选择化妆品包材要注意什么问题
  4. Mapgis图转换为可导入软件的shp
  5. 涵盖各种编程语言的深度学习库整理大全!
  6. 【转】1.1【MySQL】基本SQL语句大全
  7. C# Azure 存储-Blob
  8. 第八节:Task的各类TaskTResult返回值以及通用线程的异常处理方案。
  9. 一步步编写操作系统 54 CPL和DPL入门1
  10. python合并单元格 索引_python笔记:纵向合并表格