本文原链接见 Godot-GDExtension C++ 环境搭建 (Docker+MinGW/跨平台) | Convexwf's Kirakira Blog。
http://blog.csdn.net/ljp1919/article/details/48319779
自从中兴事件后,国家开始在政策上大力支持国产硬软件,甚至在某些项目投标要求上都加上了隐性条件,软件系统必须能在国产硬软件基础上运行。而国产硬软件一般也就是代指arm64硬件架构及在此基础上的linux定制发行版,最近一周刚好完成了一些支持arm64硬件架构的工作,这里总结一下。
在过去的几年里,Rust在程序员中获得了热情的追随。技术趋势来来往往,因此很难区分新事物带来的兴奋与技术优势带来的兴奋,但RT-Thread社区开发人员Liu Kang认为Rust是一种真正设计良好的语言。Kang说,Rust旨在帮助开发人员构建可靠、高效的软件,它从一开始就是为了这个目的而设计的。在本文中,Kang演示了Rust的许多关键特性,这些特性正是Rust适合嵌入式系统的原因。
CMake是一个跨平台的安装编译工具,可以用简单的语句来描述所有平台的安装编译过程。
已经大半个月没有更新文章了,大家还记得之前作者写的一篇关于RT-Thread的微内核移植的文章吗?如果不记得没关系。看如下是文章链接。
http://unxutils.sourceforge.net/UnxUtils.html
上面的安装方法比较简单,但是有个问题,就是mongo启动必须同时制定data,也就是要运行mongod --dbpath /usr/local/mongo/data,比较繁琐,下面介绍一种一劳永逸的安装办法,把mongo的启动添加到服务当中。但是必须制定安装的版本,本例以mongodb-src-r1.8.1.tar.gz 具体可以参考博客:http://www.9958.pw/post/centos_mongodb 注:每个版本必须和博客中一致,下面对rin博客的这篇文章做一下转载!
上面的安装方法比较简单,但是有个问题,就是mongo启动必须同时制定data,也就是要运行mongod –dbpath /usr/local/mongo/data,比较繁琐,下面介绍一种一劳永逸的安装办法,把mongo的启动添加到服务当中。但是必须制定安装的版本,本例以mongodb-src-r1.8.1.tar.gz
首先说一下JSON。JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言,易于人阅读和编写,同时也易于机器解析和生成,一般用于网络传输。
曾经不止一次遇到过这样的情况:从机器A拷贝一个二进制文件到另一台机器B,两台机器的操作系统版本一样,可是在机器A能正常运行,在机器B却提示错误。最常见的就是提示动态链接库找不到,如:
https://club.rt-thread.org/ask/article/2944.html
其中,“-shared” 表示要生成的为动态链接库文件; “-soname, libstr.so” 表示生成的动态链接库的别名为“libstr.so”; “-o libstr.so” 表示生成名字为“libstr.so.1”的实际动态链接库文件;
分布式软总线是多种终端设备的统一基座,为设备之间的互联互通提供了统一的分布式通信能力,能够快速发现并连接设备,高效地分发任务和传输数据。分布式软总线示意图见。
前面我们提到了如果我们不希望把我们的源码提供出来,但是又想提供这个接口给调用者调用,那么这个该怎么做呢?
动态链接库(又简称动态库)是很多工程项目中不可缺少的一部分。俗称.so文件(姑且就以linux系统为例,在windows中称为dll,在mac中为的dylib),在平时的使用中我们对其察觉可能并不是很深,但其实我们玩电脑的时候无时不刻在使用动态链接库。
转:https://blog.csdn.net/iteye_20658/article/details/82650699
Tkinter———— Python默认的图形界面接口。 Tkinter是一个和Tk接口的Python模块,Tkinter库提供了对 Tk API的接口,它属于Tcl/Tk的GUI工具组。Tcl/Tk是由John Ousterhout发展的书写和图形设备。Tcl(工具命令语言)是个宏语言,用于简化shell下复杂程序的开发,Tk工具包是和Tcl一起开发的,目的是为了简化用户接口的设计过程。Tk工具包由许多不同的小部件,如一个按钮、一个滚动条等。通过Tk提供的这些小部件,我们就可快速地进行GUI开发。Perl、Scheme等语言也利用Tk库进行GUI开发。Tkinter是跨平台,在各种平台下都能使用。 Python Imaging Library(PIL)————python提供强大的图形处理的能力,并提供广泛的图形文件格式支持,该库能进行图形格式的转换、打印和显示。还能进行一些图形效果的处理,如图形的放大、缩小和旋转等。是Python用户进行图象处理的强有力工具。 Pmw(Python megawidgets)Python超级GUI组件集————一个在python中利用Tkinter模块构建的高级GUI组件,每个Pmw都合并了一个或多个Tkinter组件,以实现更有用和更复杂的功能。 PyXML———— 用Python解析和处理XML文档的工具包,包中的4DOM是完全相容于W3C DOM规范的。它包含以下内容: xmlproc: 一个符合规范的XML解析器。 Expat: 一个快速的,非验证的XML解析器。 还有其他 和他同级别的还有 PyHtml PySGML PyGame———— 用于多媒体开发和游戏软件开发的模块。 PyOpenGL———— 模块封装了“OpenGL应用程序编程接口”,通过该模块python程序员可在程序中集成2D和3D的图形。 NumPy、NumArray和SAGE———— NumArray是Python的一个扩展库,主要用于处理任意维数的固定类型数组,简单说就是一个矩阵库。它的低层代码使用C来编写,所以速度的优势很明显。NumPy是Numarray的后继者,用来代替NumArray。SAGE是基于NumPy和其他几个工具所整合成的数学软件包,目标是取代 Magma, Maple, Mathematica和Matlab 这类工具。 MySQLdb模块———— 用于连接MySQL数据库。还有用于zope的ZMySQLDA模块,通过它就可在zope中连接mysql数据库。 PyGTK ———— 用于python GUI程序开发的GTK+库。GTK就是用来实现GIMP和Gnome的那个库。有了它,你完全可以自信的尝试自己制造Photoshop PyQt ———— 用于python的Qt开发库。QT就是实现了KDE环境的那个库,由一系列的模块组成,有qt, qtcanvas, qtgl, qtnetwork, qtsql, qttable, qtui and qtxml,包含有300个类和超过5750个的函数和方法。PyQt还支持一个叫qtext的模块,它包含一个QScintilla库。该库是 Scintillar编辑器类的Qt接口。 PyMedia ———— 用于多媒体操作的python模块。它提供了丰富而简单的接口用于多媒体处理(wav, mp3, ogg, avi, divx, dvd, cdda etc)。可在Windows和Linux平台下使用。 Psyco ———— 一个Python代码加速度器,可使Python代码的执行速度提高到与编译语言一样的水平。 Python-ldap ———— 提供一组面向对象的API,可方便地在python中访问ldap目录服务,它基于OpenLDAP2.x。 smtplib模块 ———— 发送电子邮件。 ftplib模块 ———— 定义了FTP类和一些方法,用以进行客户端的ftp编程。我们可用python编写一个自己的ftp客户端程序,用于下载文件或镜像站点。如果想了解ftp协议的详细内容,请参考RFC959。 xmpppy模块 ———— Jabber服务器采用开发的XMPP协议,Google Talk也是采用XMPP协议的IM系统。在Python中有一个xmpppy模块支持该协议。也就是说,我们可以通过该模块与Jabber服务器通信,是不是很Cool。 下面这些就不详细介绍,只列出名字和功能 adodb ———— ADO数据库连接组件 bsddb3 ———— BerkeleyDB的连接组件 chardet ———— 编码检测 Cheetah ———— 构建和扩充任何种类的基于文本的内容 cherrypy ———— 一个WEB framework ctypes ——
上一篇我们分析了Hello World是如何编译的,即使一个非常简单的程序,也需要依赖C标准库和系统库,链接其实就是把其他第三方库和自己源代码生成的二进制目标文件融合在一起的过程。经过链接之后,那些第三方库中定义的函数就能被调用执行了。早期的一些操作系统一般使用静态链接的方式,现在基本上都在使用动态链接的方式。
Linux下得库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。面对比一下两者:
今天配置之前项目的时候,发现有些动态链接库变了,想看看现在应用在使用哪些动态链接库的时候,进一步查了点资料;
下载地址http://download.qt.io/archive/qt/5.12/5.12.8/
本文仅做命令的表面解释,有关Linux动态库和静态库的其他知识还请参照文末参考文章。
Makefile 是一种特别设计用来帮助项目的构建管理的文件。它定义了编译器和IDE工程管理系统自动执行的命令集合,主要用于自动化编译,减轻重复性任务的负担。Makefile 文件中包含了一系列的规则来指导如何产生目标文件,这些规则包含目标、依赖和命令:
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
编程界有个传承了几十年的”规矩“--入门先从环境搭建开始,有的时候环境搭建比较简单,比如学习 HTML 编程,有浏览器就行;有时候又比较繁琐,比如 React Native 开发,需要安装 NodeJS、Python、Java、Android SDK……而 HarmonyOS Device 开发属于后者,环境搭建比较繁琐,比如需要 Linux 系统进行编译,烧录到设备时又需要用到 Windows。如果您还想体验 Wifi 模组或者“碰一碰”等其他功能,还需要提供热点及其他设备。HarmonyOS 官方提供了详细的环境搭建文档[2] 以及 Hi3861 开发板介绍[3],理论上跟着文档走一遍就能正常运行“Hello,HarmonyOS Device”。
3. SConstruct 文件 是一个类似于makefile一样的东西, 告诉 scons做什么,而不是严格的规定soncs做这件事的步骤
某日开发说,一台测试用虚机可以PING通SSH不能连了。运维同学就赶紧去查,SSHD_CONFIG配置文件都正确啊,一点错误都没有,那为什么呢?
原文链接:https://bbs.aw-ol.com/topic/3021/ 作者@caoxuetian
N年前学的makefile,当时还勉强能写一些简单的工程编译,现在已经基本忘了。makefile确实编写复杂,而且平时也不是经常使用,容易忘记。偶识了scons,一切都变的简单了。最近研究了下scons,原来需要上百行的makefile编译过程,现在只需要十行不到,而且没有makefile那些繁杂的结构语法,完全使用python语言就可以进行编译脚本编写,非常好记忆和编译一些大的工程。 直接使用apt-get install scons命令就可以完成安装,需要python环境。 Scons命令
近日,服务器迁移后,偷懒未重新编译nginx的,直接./nginx启动,结果遇到如下问题: “error while loading shared libraries” 这是是因为需要的动态库不在动态链接器ld.so的搜索路径导致。
1、opencv其实最开始只有源码,也就是sources中的代码,sources中有个modules,进入里面是各个我们平常使用的模块,如下图。
在linux系统上,程序运行时有一个特征。在程序加载前,系统会预先加载一系列库函数。如果程序运行后,它再使用动态链接库时,如果它调用链接库里面的函数名与预先加载的函数库中的某个函数名相同,那么系统会自动调用预先加载函数库中的函数。
动态链接库,又称为共享链接库。采用动态链接库实现链接操作时,程序文件中哪里需要库文件的功能模块,GCC 编译器不会直接将该功能模块的代码拷贝到文件中,而是将功能模块的位置信息记录到文件中,直接生成可执行文件。这样带来的好处是可执行文件中记录的是功能模块的地址,真正的实现代码会在程序运行时被载入内存,这意味着,即便功能模块被调用多次,使用的都是同一份实现代码(这也是将动态链接库称为共享链接库的原因)。同样这也带来了缺陷,此方式生成的可执行文件无法独立运行,必须借助相应的库文件。
摘要 现在芯片价格不断上涨,国内很多厂商也在不断的找替换方案。以ST为例,一个芯片涨了十几倍。蛋疼。。。。 最近刚好有机会拿到国产芯片MCU--兆易创新的评估板(GD32350R)。板载资源如下: 硬件描述芯片型号GD32F350R8T6CPUARM Cortex M4主频108M片内SRAM16K片内FLASH64K下载器GD-Link 拿到这个板子,首先肯定是去看看RT-THREAD是否已经包含这个BSP了,答案:没有这个GD32F350系列的BSP。那必须把他移植个RTT,然后PR一个BSP上去才
本节我们结合前面的知识点,通过动手实践来分析一个”恶意“程序。这次我们使用的例子具有极强的动手实践性,它也非常能代表恶意程序入侵系统的很多流程步骤,跟着做下来你一定收获颇多。
引言 随着越来越多功能强大的高级语言的出现,在服务器计算能力不是瓶颈的条件下,很多同学会选择开发效率高,功能强大的虚拟机支持的高级语言(Java),或者脚本语言(Python,Php)作为实现功能的首选,而不会选择开发效率低,而运行效率高的 C/C++ 作为开发语言。而这些语言一般情况下是运行在虚拟机或者解释器中,而不需要直接跟操作系统直接打交道。 虚拟机和解释器相当于为高级语言或者脚本语言提供了一个中间层,隔离了与操作系统之间进行交互的细节,这为工程师们减少了很多与系统底层打交道的麻烦,大大提高了工程师的
1. gcc -c test.c //生成目标文件 2. ar crv libtest.a test.o //生成静态链接库libtest.a 3. g++ -o main main.c -ltest //编译main程序同时链接libtest.a静态库 4. ./main //运行main程序
观察输出,所有依赖的动态链接库都有指向一个内存地址,说明所依赖的链接库都已经被加载入内存,排除了链接库不存在情况,下面就有可能是某个链接库有问题了,接下来做两件事:
ldconfig是一个动态链接库管理命令,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令–ldconfig。 ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.
可执行文件的装载 进程和装载的基本概念的介绍 程序(可执行文件)和进程的区别 程序是静态的概念,它就是躺在磁盘里的一个文件。 进程是动态的概念,是动态运行起来的程序。 现代操作系统如何装载可执行文件 给进程分配独立的虚拟地址空间 将可执行文件映射到进程的虚拟地址空间(mmap) 将CPU指令寄存器设置到程序的入口地址,开始执行 可执行文件在装载的过程中实际上如我们所说的那样是映射的虚拟地址空间,所以可执行文件通常被叫做映像文件(或者Image文件)。 可执行ELF文件的两种视角 可执行ELF格式具有不寻常的
我们经常在游戏目录下看见dll文件,这是windows下的动态链接库。在linux下我们可以使用-shared -fpic生成so文件。
ldconfig 命令的用途主要是在默认搜寻目录 /lib 和 /usr/lib 以及动态库配置文件 /etc/ld.so.conf 内所列的目录下,搜索出可共享的动态链接库(格式如 lib*.so*),进而创建出动态链接器(ld.so 或 ld-linux.so)所需的缓存文件。缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表,为了让动态链接库为系统所共享,需运行动态链接库的管理命令 ldconfig 更新动态链接库的缓存文件,此执行程序存放在 /sbin 目录下。ldconfig 通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令。
.NET Core 虽然实现了跨平台,但是不可能处处使用 C# 开发,就好像没人使用SQL开发安卓APP,每种语言都有其优秀的地方和局限性。
本文主要梳理riscv32在qemu的移植过程,将通过几天时间将其整理和最小系统的bring up。为了保证代码的可维护性,所有修改符合rt-thread bsp制作规范。目标就是riscv32 qemu 上运行rt-thread。以RT-Thread v4.0.3 released为工程代码的基线,进行开发移植工作。
之前写过一篇 《[-NDK 导引篇 -] 在NDK开发之前你应知道的东西》 介绍了在进入 NDK 学习之前,如何摆正自己的角色。时隔两年,NDK 系列文章开始填坑,在上一篇 《 NDK 是什么 | FFmpeg 5.0 编译 so 库》 中,介绍了 NDK 的概念,以及其作用。
本文作者:Fooying、zhenyiguo、murphyzhang 一、背景 云鼎实验室曾分析不少入侵挖矿案例,研究发现入侵挖矿行为都比较粗暴简单,通过 top 等命令可以直接看到恶意进程,挖矿进程不会被刻意隐藏;而现在,我们发现黑客开始不断使用一些隐藏手段去隐藏挖矿进程而使它获得更久存活,今天分析的内容是我们过去一个月内捕获的一起入侵挖矿事件。 二、入侵分析 本次捕获案例的入侵流程与以往相比,没有特殊的地方,也是利用通用漏洞入侵服务器并获得相关权限,从而植入挖矿程序再进行隐藏。 通过对几个案例的分析
—————-加入新公司后,基本上是一键式打包脚本,对于GCC基本上快忘了,重新拾起。
库的存在,大大方便了我们进行编程。因为有了库,我们不必再从0开始,例如我们大多数人C语言写的第一个程序Hello World!都是用了库函数。以printf为例,我们只需要在程序源代码中包含<stdio.h>这个头文件之后,就可以使用printf函数了。这极大的方便了编程。同时库所带来的好处在于,头文件和库文件相结合的访问机制。有时候我们只想让别人使用自己实现的功能,并不想公开实现功能的源码,就可以将其制作为库文件,这样用户获取到的是二进制文件,而头文件又只包含声明部分,这样就实现了“将源码隐藏起来”的目的,且不会影响用户使用。
领取专属 10元无门槛券
手把手带您无忧上云