cmake文件(cmake生成so文件体积过大问题)

:暂无数据 2026-05-05 05:00:03 0
正如一位名家所言:“弄懂cmake生成so文件体积过大问题,是通往cmake文件殿堂的捷径。” 今天,我们就来走一走这条捷径。

本文目录

cmake生成so文件体积过大问题

最近因为项目中有部分接口方法需要写在so文件中,那就简单开搞,AndroidStudio使用cmake打包生成so文件很简单,主要是c++中实现方法不复杂,具体生成so流程不多说,网上很多demo。

虽然c++文件不过几十百来行,然而生成的so文件接近1M,这肯定是属于异常的,包体积无故增加好几M,必须优化一下。

网上查了下,很多都说在*****文件中增加下面俩行:

结果肯定是无效的,不然也不会有这篇文章了 ^ - ^
使用Androidstudio打开so文件,发现有很多冗余的数据,接近上万行,因为网络上大家都建议使用c来写而不是c++,所以想着是不是调用了c++的方法库导致so文件增加的;

仔细观察发现自己使用了c++提供的md5相关算法头文件,所以导致引入文件很多,打包体积很大;
转变去掉相关引入就ok;

去掉后重新打包体积只有小几十kb;

*****文件编写

cmake使用

cmake是什么?
一.单目录单文件的编写方式

1.创建*****文件

     cmake_minimum_required(VERSION ****)   --版本号设置
     PROJECT(工程名)

  ---生成可执行文件

    ADD_EXECUTABLE(  目标文件(可执行文件)   依赖文件(.cpp))
二.单目录多个源文件的方式

需要添加AUX_SOURCE_DIRECTORY(./   DIR_SRCS)   ------将某个目录下的文件存储在某个变量内

需要修改的是ADD_EXEXUTABLE(目标文件     ${DIR_SRCS} )
三.多文件多目录----非标准与标准的方式

工程结构:

1.先编写里面的*****文件

    AUX_SOURCE_DIRECTORY(. DIR_LIB_SRCS)

    add_library(MyLib ${DIR_LIB_SRCS})#静态库

    #add_library(MyLib  SHARED ${DIR_LIB_SRCS})  #动态库

2.编写外层*****

cmake链接库文件不使用-l

Never 将 -l 标志添加到 CMAKE_EXE_LINKER_FLAGS 和 》CMAKE_CXX_FLAGS(标志 -l 用于链接器,而不是编译器).
对于与库的链接,请使用 target_link_libraries:它是专门用于该目的:
target_link_libraries(《your-executable》 curl)
《小时》
当您向 *_FLAGS 变量添加标志时,该标志将在链接器的命令行中源文件之前(实际上是目标文件)添加.如果源文件使用库中的某些函数,则链接器找不到它.

cmake java

cmake java是什么,让我们一起了解下?

cmake可以编译源代码、制作程序库、产生适配器(wrapper)、还可以用任意的顺序建构执行档。

如何使用cmake编译java工程?

cmake对编译Java代码和执行Java类文件的支持有限。

标准模块FindJava可用于查找本地机器上安装的JDK,标准模块UseJava为Java提供了一些功能,其中有一个函数add_jar来将Java源文件编译成jar文件。
这是一个小例子,演示如何使用add_jar.给定Java示例源文件。

*****: public class HelloWorld {undefined public static void main(String args) {undefined *****("Hello, World!"); } }
以下CMake列表文件将编译*****到一个jar文件*****,并添加一个使用JVM运行该jar的CMake测试:
cmake_minimum_required (VERSION ***) find_package(Java REQUIRED) include(UseJava) enable_testing() project (HelloWorld) set(CMAKE_J**A_COMPILE_FLAGS "-source" "***" "-target" "***") add_jar(HelloWorld *****) get_target_property(_jarFile HelloWorld JAR_FILE) get_target_property(_classDir HelloWorld CLASSDIR) message(STATUS "Jar file ${_jarFile}") message(STATUS "Class compiled to ${_classDir}") add_test(NAME TestHelloWorld COMMAND ${Java_J**A_EXECUTABLE} -cp ${_jarFile} HelloWorld)
CMake变量CMAKE_J**A_COMPILE_FLAGS可用于指定编译标志,作为副作用,add_jar命令将设置目标属性JAR_FILE和CLASSDIR,分别用于获取生成的jar文件和编译的类文件目录的路径。

cmake编译单/多文件

在该路径下会生成一个文件夹(CMakeFiles),三个文件(Makefile, *****, cmake_*****)以及一个程序(addition)

此时的文件目录结构为

该项目该依赖于MPI,GDAL和cereal库。MPI和GDAL库自行编译

1.配置各种编译的时候,可以使用set设置,更多详情,请自行搜索。
2.头文件的包含请使用include_directories。
3.搜索源文件请使用aux_source_directory。
4.第三方库的查找使用 find_package。例如我们想找GDAL, 那么 find_package(GDAL), 它会在 /usr/share/cmake/Modules 文件中的*****文件中去找GDAL的各种信息。前提是GDAL 是make install的, *****中才会有GDAL的各种信息。否则的话,我们需要set自行制定GDAL的相关信息。
5.第三方库的链接用target_link_libraries。
***隐藏网址***

***隐藏网址***
***隐藏网址***

cmake在哪里找.pc文件

1、首先打开第三方库,点击进入cmake。
2、其次点击设置,在设置内找到文件设置。
3、最后点击pc文件即可。

cmake文件的世界里,cmake生成so文件体积过大问题是一把关键的钥匙。希望这篇文章把这把钥匙交给了你。用它去开启更多可能,也欢迎回来分享你打开的宝藏!
本文编辑:admin

更多文章:


停止接种第一剂次(宜昌市暂停第一针次新冠疫苗接种公告原文)

停止接种第一剂次(宜昌市暂停第一针次新冠疫苗接种公告原文)

您是否曾想过,停止接种第一剂次究竟是怎么一回事?它与宜昌市暂停第一针次新冠疫苗接种公告原文之间又有什么联系?本文将为您一探究竟。

2026年5月5日 06:20

落地页模板网站(信息流广告落地页怎么做有没有什么网站或者模板推荐)

落地页模板网站(信息流广告落地页怎么做有没有什么网站或者模板推荐)

关注本号的朋友都知道,我们一直在持续输出关于落地页模板网站的干货。今天,我们就聚焦到大家反复问到的信息流广告落地页怎么做有没有什么网站或者模板推荐上。

2026年5月5日 06:00

standardize(standardize什么意思及同义词)

standardize(standardize什么意思及同义词)

本文将围绕standardize展开,重点探讨三个方面:standardize什么意思及同义词的基本概念、常见误区以及实践应用。让我们开始吧。

2026年5月5日 05:40

10个装逼的cmd命令(简单的电脑装b代码)

10个装逼的cmd命令(简单的电脑装b代码)

想高效掌握10个装逼的cmd命令的核心吗?本文将为你聚焦简单的电脑装b代码这一关键环节,帮你节省大量摸索时间。

2026年5月5日 05:20

cmake文件(cmake生成so文件体积过大问题)

cmake文件(cmake生成so文件体积过大问题)

正如一位名家所言:“弄懂cmake生成so文件体积过大问题,是通往cmake文件殿堂的捷径。” 今天,我们就来走一走这条捷径。

2026年5月5日 05:00

如何用asp实现在线用户列表?ASP在线积分是怎么实现

如何用asp实现在线用户列表?ASP在线积分是怎么实现

在深入了解asp在线的路上,如何用asp实现在线用户列表就像一道绕不开的坎。别担心,本篇攻略将助你轻松跨越。

2026年5月5日 04:40

showmodaldialog(windows.showmodaldialog 是什么请求)

showmodaldialog(windows.showmodaldialog 是什么请求)

最新数据显示,关注showmodaldialog的人中,超过70%都对windows.showmodaldialog 是什么请求抱有浓厚兴趣。本文将满足这一核心需求。

2026年5月5日 04:20

python3 正则表达式(Python正则表达式中re.M 是什么意思)

python3 正则表达式(Python正则表达式中re.M 是什么意思)

大家好,今天小编来为大家解答以下的问题,关于python3 正则表达式,Python正则表达式中re.M 是什么意思这个很多人还不知道,现在让我们一起来看看吧!

2026年5月5日 04:00

struts2安装(如何使用eclipse安装struts)

struts2安装(如何使用eclipse安装struts)

大家好,今天小编来为大家解答以下的问题,关于struts2安装,如何使用eclipse安装struts这个很多人还不知道,现在让我们一起来看看吧!

2026年5月5日 03:40

select事件有哪些(如何给select添加双击事件)

select事件有哪些(如何给select添加双击事件)

正如一位名家所言:“弄懂如何给select添加双击事件,是通往select事件有哪些殿堂的捷径。” 今天,我们就来走一走这条捷径。

2026年5月5日 03:20

最近更新

standardize(standardize什么意思及同义词)
2026-05-05 05:40:03 浏览:0
showmodaldialog(windows.showmodaldialog 是什么请求)
2026-05-05 04:20:04 浏览:0
热门文章

split函数 sql(求sql split函数的用法)
2026-03-26 20:40:01 浏览:1
标签列表