当前位置: 首页 > wzjs >正文

开封建网站的公司西安推广公司无网不胜

开封建网站的公司,西安推广公司无网不胜,中小型网站建设与管理设计总结,可以做电影网站的主机文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…

文章目录

    • 1. 前述
    • 2. 三方库的封装
      • 2.1 `xrepo`中的库
      • 2.2 `xrepo`之外的库
        • 2.2.1 `opencv`
        • 2.2.2 `rknnrt`
        • 2.2.3 `spdlog`
    • 3. `rknn_engine`库

1. 前述

OK,开始写第二篇的内容了。这篇博客主要能写一下:

  • 如何给一些三方库按照xmake方式进行封装,供调用
  • 如何按照xmake构建rknn_engine

2. 三方库的封装

这个三方库的封装,主要分为如下两类:

  • 类似opencv这种在xmakexrepo中已经包含的库
  • 类似rknnrt这种纯粹的三方库,完全需要我们进行处理的库

2.1 xrepo中的库

比如Eigenopencv库,我们可以直接使用xrepo中的库,比如直接:

add_requires("opencv", "eigen3")

在使用xmake的时候,可以直接通过网络下载依赖库,然后进行处理。但是,一般我们在rk3588上都会通过apt安装了libopencv-dev这些,所以我还是建议直接使用系统库,避免库的版本问题,所以就是如之前博客说的:

add_requires("cmake::OpenCV", {alias = "opencv", system = true})
add_requires("cmake::Eigen3", {alias = "eigen3", system = true})

但是,还有一个问题,如果我们不是在rk3588上进行编译,而是通过交叉编译呢?使用交叉编译的时候,xmake能够自动调用交叉编译器进行opencv的编译,然后得到一个可被调用的库,但是!opencv这种库很有可能编译失败,依赖的ffmpeg等等库太多了,那么有没有优雅的解决方法呢?

其实有现成的aarch64opencv库,我们可以把这个库直接拿下来,看做是rknnrt一样处理!

2.2 xrepo之外的库

使用rk3588,调用其npu,必然要用rk官方的rknnrtlibrga库,然而xrepo中并不收纳这些库,所以我们就需要自己构建。当我们拿到头文件和库文件之后,我们就可以按照如下的目录结构进行处理:

./xmake_repo
└── packages├── e│   └── eigen3│       ├── include│       │   └── Eigen│       │       ├── Eigen的各种头文件│       └── xmake.lua├── l│   └── librga│       ├── cross│       ├── linux│       │   └── arm64│       │       ├── include│       │       └── lib│       └── xmake.lua├── o│   └── opencv│       ├── cross│       ├── linux│       │   └── arm64│       │       ├── bin│       │       ├── include│       │       ├── lib│       │       └── share│       └── xmake.lua├── r│   └── rknnrt│       ├── cross│       ├── linux│       │   └── arm64│       │       ├── include│       │       └── lib│       └── xmake.lua└── s└── spdlog├── include│   └── spdlog│       ├── sdplog的各种头文件└── xmake.lua

当然细心的我们发现了,我并不是每个库的目录结构都一样,而且有的目录下面还有一个cross,这个其实是一个软链接,都是对应链接同目录的linux目录。但是有一个非常相同,每个目录下都有一个xmake.lua,这将是保证xmake能够找到库的核心文件。

这里我就以三个比较代表性的说明一下。

2.2.1 opencv

这个opencv主要就是在交叉编译的时候使用的,如果在rk3588平台上直接编译,则不使用我们自己处理的这个,所以这里的cross是我们最终使用的文件(虽然最终还是软链接到了linux)……

那么xmake.lua可以这样写:

package("opencv")set_description("The opencv package")add_configs("shared", {description = "Build shared library.", default = true, type = "boolean", readonly = true})on_load(function (package)package:set("installdir", path.join(os.scriptdir(), package:plat(), package:arch()))end)on_fetch(function (package)local result = {}local libfiledir = (package:config("shared") and package:is_plat("windows", "mingw")) and "bin" or "lib"result.links = {"opencv_core", "opencv_video", "opencv_videoio"}result.linkdirs = package:installdir("lib")result.includedirs = package:installdir("include/opencv4")result.libfiles = {path.join(package:installdir(libfiledir), "libopencv_core.so"),path.join(package:installdir(libfiledir), "libopencv_video.so"),path.join(package:installdir(libfiledir), "libopencv_videoio.so")}return resultend)

package描述了包名,务必和文件夹同名

on_load()函数的具体含义和使用参考xmake的官方文档,我们这里只是定义了包的安装目录

on_fetch()函数的具体含义和使用参考xmake的官方文档,但是里面定义了头文件目录、库文件目录,和将要链接的库。

注意的是这里我只写了链接libopencv_core.solibopencv_video.solibopencv_videoio.so,是因为只用到了这些,如果你要用到更多,那就在对应添加一下即可。

2.2.2 rknnrt

因为这是使用rk平台必须使用的库,所以不管是本机编译还是交叉编译,都要使用到,所以crosslinux都是将要使用到的。所以对应的xmake.lua

package("rknnrt")set_description("The rknnrt package")add_configs("shared", {description = "Build shared library.", default = true, type = "boolean", readonly = true})on_load(function (package)-- 官方提供的库,也只有一个版本,就不区分 release 还是 debug 了-- package:set("installdir", path.join(os.scriptdir(), package:plat(), package:arch(), package:mode()))package:set("installdir", path.join(os.scriptdir(), package:plat(), package:arch()))end)on_fetch(function (package)local result = {}local libfiledir = (package:config("shared") and package:is_plat("windows", "mingw")) and "bin" or "lib"result.links = "rknnrt"result.linkdirs = package:installdir("lib")result.includedirs = package:installdir("include")result.libfiles = path.join(package:installdir(libfiledir), "librknnrt.so")return resultend)
2.2.3 spdlog

spdlogEigen都是纯头文件库,所以不管是aarch64还是x86,都是使用同样一套文件。为了简单,我还是同意都放在本地的repo之中。这里给一下spdlogxmake.lua示例:

package("spdlog")set_description("Fast C++ logging library.")add_configs("library", {headeronly = true})on_load(function (package)package:set("installdir", os.scriptdir())end)on_fetch(function (package)local result = {}result.includedirs = package:installdir("include")return resultend)

OK,特别的地方相信聪明的我们肯定注意到了。我就不指出来了!

3. rknn_engine

三方库我们都已经通过自己写的xmake.lua加入到xmakerepo中了,rknn_engine的目录结构:

./rknn_engine/
├── demo
├── include
├── README.md
├── src
├── xmake.lua
└── xmake_repo

那就直接给出xmake.lua的内容:

set_project("rknn_engine")
set_version("1.0.1", {soname = true})
set_xmakever("2.3.1")
set_languages("cxx17", "c17")
set_warnings("all")option("local_repo")set_default("./xmake_repo")set_showmenu(true)set_description("local_repo for xmake")
option_end()add_repositories("local-repo $(local_repo)")
add_requires("spdlog", "rknnrt", "librga")if is_plat("cross") then add_requires("opencv", "eigen3")
else add_requires("cmake::OpenCV", {alias = "opencv", system = true})add_requires("cmake::Eigen3", {alias = "eigen3", system = true})
endtarget("rknn_engine")-- set_kind("$(kind)")set_kind("shared")-- set_basename("rknn_engine")-- 添加公共依赖add_includedirs("include", {public = true})add_headerfiles("include/(**.h)")add_files("src/**.cpp")add_packages("spdlog", "rknnrt", "librga", "opencv", "eigen3")add_rules("utils.install.pkgconfig_importfiles")add_rules("utils.install.cmake_importfiles")-- 交叉编译命令
-- xmake f -p cross --cross=aarch64-linux-gnu-
-- 或者
-- xmake f -p cross --sdk=/path/to/cross/compiler

注意到这里的几个地方:

  • option(“local_repo”)

    这个是加一个编译选项,可以配置本地repo的地址

  • add_repositories(“local-repo $(local_repo)”)

    添加一个本地repo的地址

  • if is_plat(“cross”) then

    这个则是按照编译的平台进行处理,可以对应xmake f -p cross中的这个-p选项,具体有哪些取值也还是参考xmake的官方文档

  • add_rules(“utils.install.pkgconfig_importfiles”)

    add_rules(“utils.install.cmake_importfiles”)

    这个是增加最终安装的规则,可以增加pkgconfigcmake的东西

OK,这篇博客就写这些了。


文章转载自:

http://K8S47saP.rnjgh.cn
http://zSlQRaax.rnjgh.cn
http://qbXswXFY.rnjgh.cn
http://rJfLOgHI.rnjgh.cn
http://oH7OIDRq.rnjgh.cn
http://HKCvEQOH.rnjgh.cn
http://MfbWOkeR.rnjgh.cn
http://xuzd82pz.rnjgh.cn
http://iNNjG72X.rnjgh.cn
http://W8kxguzU.rnjgh.cn
http://aDl8bqVz.rnjgh.cn
http://9AF0PwIx.rnjgh.cn
http://nYleQclq.rnjgh.cn
http://U9yg6lxo.rnjgh.cn
http://mePBBw9h.rnjgh.cn
http://8fKsPTBC.rnjgh.cn
http://nHcxr3Mh.rnjgh.cn
http://SIjbqYhS.rnjgh.cn
http://pa2tlruF.rnjgh.cn
http://JrJueSFO.rnjgh.cn
http://mw17aEQk.rnjgh.cn
http://iG4gX40X.rnjgh.cn
http://TOWZmq2F.rnjgh.cn
http://DU5WOxGs.rnjgh.cn
http://26ubMqX2.rnjgh.cn
http://FIXDUP6g.rnjgh.cn
http://WOHORGyX.rnjgh.cn
http://RUqxbJxn.rnjgh.cn
http://pfbSt8A9.rnjgh.cn
http://dZ1sZWJM.rnjgh.cn
http://www.dtcms.com/wzjs/772717.html

相关文章:

  • 上海网站建设yuue茶叶市场网站建设方案
  • 海外做淘宝网站wordpress 赢利模式
  • 网站设计的内容建设电影推荐网站的项目背景
  • 如何用域名进网站女孩子做室内设计累吗
  • 苏宁电器网站建设特点分析网站如何管理
  • html旅游网站页面设计模板如何建立一个网站
  • 常州微信网站建设公司做一个属于自己的网页
  • 做淘客网站如何用wordpress建网站
  • 网站建设书籍资料网页网站设计培训
  • 深圳网站建设 营销wordpress极客学院
  • 有什么比较好的画册设计网站正邦设计陈丹
  • 湖南省住房与城乡建设部网站开发区建网站外包
  • 营销型网站建设价格贵吗wordpress主题解压后有多个文件
  • 北京网站开发网络公司郑州网站建设特色
  • 自己做的网站发到网上杭州做兼职网站建设
  • 淘宝代做网站玉树电子商务网站建设公司
  • 长春建站费用中卫网架配件多少钱
  • 网站备案名称更改宝丰网站制作效果好
  • 东莞营销网站建设报价房山企业网站建设公司
  • 山东广饶县建设局网站wordpress如何降级
  • 济南手机建站模板joomla 多语言网站
  • 门户网站啥意思wordpress开启新用户注册功能
  • 网站建设的内容管理免费qq刷赞网站推广
  • 安溪网站建设公司网页设计可以从事什么工作
  • 厚街网站建设费用质量好的购物平台
  • 默认网站预览能能显示建设中车牌照损坏在网站做的能用吗
  • 网站建设开发的规划流程百度在线识图查图片
  • 谷秋精品课程网站建设软件手机有办法做网站吗
  • 免x网站网站semseo先做哪个
  • 二七区网站建设php如何做网站