CMake编译32位版本时出现“cannot find -lXXX”错误的两种可能情况

2023-10-28 21:59

本文主要是介绍CMake编译32位版本时出现“cannot find -lXXX”错误的两种可能情况,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 背景
  • 错误一: 未指定编译位数
    • 解决办法
  • 错误二: 编译位数被覆盖
    • 解决方法

背景

最近写了个小游戏, 想编译个32位版本发出去. 怎奈何三番五次出现cannot find -lXXX 错误, 如图. 气死人不偿命的cannot find

经过反复查找, 终于弄清楚了错误缘由, 没想到居然还是两个…气死

错误一: 未指定编译位数

确切地说, 是没有给C语言编译器gcc和C++编译器g++都指定编译位数

仅给C++编译器传入-m32参数
上图: 仅向 C++ 编译器传入"-m32"参数

在一般情况下这是不会有问题的, 但当你在代码中标明了要编译器以C语法编译时, 情况就大不相同了

/* -- snip -- *///在代码中显式标明以C语法编译
extern "C" {
#include<SDL.h>
#include<SDL_image.h>
}

此时编译器会将C++代码编译为32位, 而被 extern "C" 修饰的部分仍然以64位进行编译. 因此如果让编译器链接32位的库文件, 显然会发生 cannot find -lXXX 的错误

解决办法

给C语言编译器也注明以32位编译

向C语言编译器传入"-m32"参数

错误二: 编译位数被覆盖

全网好像就我遇到了这种问题…是我脸黑吗

原因很简单, 就是传入的 -m32 参数被别的参数覆盖了, 如图
在这里我指定了以32位编译, 而在下面

-mwindow 参数可以指定程序不出现dos的黑窗口, 观感比较好

又传入了 -mwindow 参数, 导致上面的 -m32 被覆盖

一个形象的例子:

std::string CMAKE_CXX_FLAGS = " -m32";
CMAKE_CXX_FLAGS = " -mwindow";
//出错
//CMAKE_CXX_FLAGS == " -mwindow"
std::string CMAKE_CXX_FLAGS = " -m32";
CMAKE_CXX_FLAGS += " -mwindow";
//正确
//CMAKE_CXX_FLAGS == " -m32 -mwindow"

解决方法

使用 ${} 的语法来叠加参数, 如图.

效果上相当于 +=

希望能够帮到你
EiEddie于10 2 2021, 转载请注明原作者

这篇关于CMake编译32位版本时出现“cannot find -lXXX”错误的两种可能情况的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/296233

相关文章

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

SpringBoot中的404错误:原因、影响及解决策略

《SpringBoot中的404错误:原因、影响及解决策略》本文详细介绍了SpringBoot中404错误的出现原因、影响以及处理策略,404错误常见于URL路径错误、控制器配置问题、静态资源配置错误... 目录Spring Boot中的404错误:原因、影响及处理策略404错误的出现原因1. URL路径错

java中不同版本JSONObject区别小结

《java中不同版本JSONObject区别小结》本文主要介绍了java中不同版本JSONObject区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1. FastjsON2. Jackson3. Gson4. org.json6. 总结在Jav

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

golang1.23版本之前 Timer Reset方法无法正确使用

《golang1.23版本之前TimerReset方法无法正确使用》在Go1.23之前,使用`time.Reset`函数时需要先调用`Stop`并明确从timer的channel中抽取出东西,以避... 目录golang1.23 之前 Reset ​到底有什么问题golang1.23 之前到底应该如何正确的

IDEA如何切换数据库版本mysql5或mysql8

《IDEA如何切换数据库版本mysql5或mysql8》本文介绍了如何将IntelliJIDEA从MySQL5切换到MySQL8的详细步骤,包括下载MySQL8、安装、配置、停止旧服务、启动新服务以及... 目录问题描述解决方案第一步第二步第三步第四步第五步总结问题描述最近想开发一个新应用,想使用mysq

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.