问题描述

CLion使用Cmake 进行项目代码管理和编译控制。

程序引用动态库,后编译出现错误

Process finished with exit code -1073741515 (0xC0000135)

项目目录如下:

CMakeLists.txt 文件内容如下:

cmake_minimum_required(VERSION 3.20)
project(gogmssl C)set(CMAKE_C_STANDARD 99)LINK_DIRECTORIES(lib)
include_directories(include)add_executable(gogmssl main.c)
target_link_libraries(gogmssl cyggmssl-3.dll)

这里程序使用到了gmssl动态库,编译正常通过并且生成了可执行文件,这个可以从build目录中看到

解决问题

0xC0000135 是由于可执行程序没有找到动态链接库导致

动态链接库在编译时是不会打包进可执行程序中,它在编译后可执行程序中只会留下连接地址,在程序启动启动时根据符号连接找到动态连接库相关代码。

那么可执行文件到哪儿找动态连接库?

  • 可执行文件所在路径
  • 操作系统动态库指定目录,如Linux 位于 /lib

如何解决该错误?

  • 复制该链接库到可执行文件的目录

以上面程序为例,只需要把lib/cyggmssl-3.dll复制到build目录再次运行就可以解决问题。

静态链接

该问题实质上是因为程序使用了链接库中的代码,但是运行时没有找到代码导致。

有没有什么办法编译后程序不需要而外提供动态链接库才能运行?

  • 使用静态链接库编译

静态链接实际上是库代码的一个打包整合,因此在编译时候将会和程序源代码一起编译,编译后可执行程序中就不需要依赖库文件就可以运行,因为库的代码已经在可执行文件中。

如何实现?

将动态连接库换成静态链接库,静态链接库一般以.a结尾,例如:

add_executable(gogmssl main.c)
target_link_libraries(gogmssl libgmssl.a)

编译运行

参考文献

[1]. CSDN . Ocean&&Star . clion:win10下调用C动态库 . 2021-01-08 . https://blog.csdn.net/zhizhengguan/article/details/112373002
[2]. 博客园 . 王彬彬 . cmake 添加头文件目录,链接动态、静态库 . 2016-06-29 . https://www.cnblogs.com/binbinjx/p/5626916.html
[3]. Segmentfault . 码农的荒岛求生 . 彻底理解链接器:三,库与可执行文件 . 2018-09-18 . https://segmentfault.com/a/1190000016433897

CLion程序编译错误 0xC0000135相关推荐

  1. pcl的安装错误和高翔第5讲程序编译错误recipe for target 'all' failed

    今天编译程序的时候 遇到了这个错误: Makefile:149: recipe for target 'all' failed 之前其实安装pcl时也遇到过,但是以为是资源或者一些小原因,就只是照着网 ...

  2. 程序编译错误error: stray ‘\200’ in program;error: stray ‘\343’ in program\CodeToCompile

    程序编译错误error: stray '\200' in program:error: stray '\343' in program 问题分析 实验 原理 问题分析 CodeToCompile 当你 ...

  3. java程序编译错误属于异常吗_“Cannot find symbol”编译错误是什么意思?

    "Cannot find symbol"编译错误是什么意思? 1."Cannot find symbol"错误是什么意思? 首先,它是编译错误1.这意味着,无论 ...

  4. python程序编译错误_Python编译错误集锦

    1 IndentationError: expected an indented block Python语言是一款对缩进非常敏感的语言,给很多初学者带来了困惑,即便是很有经验的Python程序员,也 ...

  5. c语言做土壤湿度传感器程序,单片机土壤湿度传感器设计 程序编译错误

    捕获.PNG (74.97 KB, 下载次数: 1) 没有声明,这里怎么解决 2019-12-19 16:18 上传 #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 ...

  6. java编译错误 程序包javax.servlet不存在javax.servlet.*

    java编译错误 程序包javax.servlet不存在javax.servlet.* 编译:javac Servlet.java 出现 软件包 javax.servlet 不存在 软件包javax. ...

  7. 关于预编绎网站的问题[已预编译此应用程序的错误]

    关于预编绎网站的问题[已预编译此应用程序的错误] 当我们开发完项目后发布网站时,会生成一个PrecompiledApp.config文件, PrecompiledApp.config 文件主要用于跟踪 ...

  8. [C++]Linux之Ubuntu下编译C程序出现错误:“ stray ‘\302‘或者‘\240‘ in program”的解决方案

    [C++]Linux之Ubuntu下编译C程序出现错误:" stray '\302'或者'\240' in program"的解决方案 参考文章: (1)[C++]Linux之Ub ...

  9. 每个c语言程序文件的编译错误被分为什么,已打印中央电大C语言考试题库(c语言小题+编程)...

    C语言程序设计课程期末复习练习 一.单选题 1.在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为( A ). A. main B. MAIN C. name D. function 2.每 ...

  10. 解决maven 引用JDK内部类编译错误 程序包:com.sun.xml.internal.bind.marshaller.CharacterEscapeHandler不存在...

    解决maven 引用JDK内部类编译错误 程序包:com.sun.xml.internal.bind.marshaller.CharacterEscapeHandler不存在- 网上很多帖子的解决方案 ...

最新文章

  1. 如何将读书与自己的生活工作结合起来?
  2. MaxCompute(原ODPS)使用总结-初级篇
  3. Java集合类框架的基本接口有哪些?
  4. Java中不常见的关键字 / 修饰符(volatile , native , transient)
  5. doe报告模板_【质量管理小组QCC活动】报告模板
  6. 多线程编程是后台开发人员的基本功
  7. 装了linux开机出现错误,[已解决]安装完,启动出现错误!
  8. C# sqlDataReader区别Dataset
  9. python中的字体英文名,CSS 中文字体的英文名称
  10. 不属于软件性能测试的范畴,兼容性测试_以下哪种软件测试不属于广义软件性能测试的范畴______。...
  11. Spinner的setOnItemSelectedListener(
  12. Linux打印当前目录
  13. 国产实时操作系统+intel x86/龙芯平台超边缘计算机方案
  14. 可以美化图片的方法每日分享
  15. python怎么制作游戏存档功能,如何在Python中创建目录的zip存档?
  16. 基于Xilinx artix 7的FPGA高级应用(二):千兆以太网通信(原理篇)
  17. [其他咚咚]Twins的专辑列表
  18. 写给想考金融硕士的学弟学妹
  19. internal/modules/cjs/loader.js:584 issue
  20. Python基础教程之数据类型

热门文章

  1. 无根树的计数——prufer序列
  2. DM数据库体系结构介绍
  3. 2012年托福听力真题词汇总结
  4. 计算机无法添加用户名或密码错误,win10系统无法登录网络打印机提示未知的用户名或者密码错误的设置技巧...
  5. 金蝶中间层服务器组件注册使用信任方式,提示:用户名或密码错误
  6. MATLAB 创建function函数,主程序打不开function函数所在的.m文件怎么办?
  7. 五分钟告诉你什么是爬虫?
  8. 获取验证码以及验证验证码
  9. 企业微信第三方应用Demo源码
  10. 野火指南者ESP8266模块学习