使用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. 远程办公时,有哪些提高沟通效率的技巧?
  2. 【重要预警】“永恒之蓝”漏洞又现新木马 组成僵尸网络挖矿虚拟货币
  3. [Node]node.js 文件操作
  4. 传承or创新 ?解密分布式数据库自研修炼之路
  5. java字符串拆分成数组_用Java实现JVM第八章《数组和字符串》
  6. 第 十 七 天 : 安 装 php 遇 到 的 错 误 汇 总
  7. 阿里架构师眼中Dubbo的过去,现在以及未来
  8. imx6 i2c分析
  9. PHP、Python 上榜最慢的现代编程语言
  10. [最小生成树][Dij] Jzoj P5818 做运动
  11. 浙大计算机基础知识2,[精选资料]14年浙大远程计算机基础2Windows知识题高起专 作业题2答案...
  12. spring读取配置文件
  13. 锐捷网络linux如何认证上网,如何在Linux里面进行锐捷认证上网
  14. 一个人的生命周期,就是人的一生
  15. 爬虫工程师是干什么的?你真的知道吗?
  16. 完整的ACSII编码表
  17. css文字闪光特效,利用js css3实现文字闪光滑过动画特效
  18. HCI 基础知识之一
  19. 借助NetFlow Analyzer的IPAM SPM插件,实现IP和交换机端口管理
  20. android将控件镜像显示,Android重写ImageView实现图片镜像效果

热门文章

  1. 源码安装mysql5.1.51
  2. 网络编程常用接口的内核实现----sys_listen()
  3. linux文件系统_Linux的文件系统简介
  4. diff算法_vue源码解读 diff算法
  5. python内置函数分类_Python 69个内置函数分类总结
  6. 【转】人工智能教程-前言
  7. c#中的BeginInvoke和EndEndInvoke 摘要
  8. UML之用例图(use case)箭头方向
  9. ABP入门系列(12)——如何升级Abp并调试源码
  10. Spark读取HDFS上的Snappy压缩文件所导致的内存溢出问题 java.lang.OutOfMemoryError: GC overhead limit exceeded