工作中需要自行编译一个Python二进制程序,并尽量减少该程序依赖的库文件,使之在相同CPU架构上有更良好的可移植性。先找了下网上的资料,都不太详尽,经过探索最终还是成功了,这里记录一下过程以备忘。
Hello,小伙伴们,大家好!最近有小伙伴问我程序库相关的问题。程序库的存在很大程度上提高了程序的复用性、可维护性,但是程序库的应用往往对于初学者来说有些摸不清头脑,所以这一期本文从Linux的角度谈谈Linux下的程序库。 1. 什么是库 库文件一般就是编译好的二进制文件,用于在链接阶段同目标代码一起生成可执行文件,或者运行可执行文件的时候被加载,以便调用库文件中的某段代码。库文件无法直接执行,因为它的源代码中没有入口主函数,而只是一些函数模块的定义和实现,所以无法直接执行。程序库使程序更加模块化,重新编
ldd用来输出二进制可执行文件或者库文件的依赖;它本是一个script, 并不是binary 文件,其本质上只是设置了环境变量: D_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、LD_VERBOSE(请参考ldd脚本文件的内容查看具体设置的环境变量)等。当通过export LD_TRACE_LOADED_OBJECTS=VALUE设置变量(该变量的值无所谓)后,那么无论执行任何的二进制可执行文件:都会显示该二进制文件对应的依赖;其效果和ldd 命令一样;
Linux下得库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。面对比一下两者:
ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量,如下:LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、LD_VERBOSE等。当LD_TRACE_LOADED_OBJECTS环境变量不为空时,任何可执行程序在运行时,它都会只显示模块的dependency,而程序并不真正执行。要不你可以在shell终端测试一下,如下:
-c create的意思 -r replace的意思,表示当插入的模块名已经在库中存在,则替换同名的模块。如果若干模块中有一个模块在库中不存在,ar显示一个错误消息,并不替换其他同名模块。默认的情况下,新的成员增加在库的结尾处,可以使用其他任选项来改变增加的位置。
当谈论到Linux系统管理时,了解常见的目录结构是非常重要的。Linux操作系统采用一种层次结构的目录布局,每个目录都有其特定的用途和功能。在本篇博客中,我们将介绍Linux目录的速查表,帮助您更好地理解和导航Linux文件系统。
库的存在,大大方便了我们进行编程。因为有了库,我们不必再从0开始,例如我们大多数人C语言写的第一个程序Hello World!都是用了库函数。以printf为例,我们只需要在程序源代码中包含<stdio.h>这个头文件之后,就可以使用printf函数了。这极大的方便了编程。同时库所带来的好处在于,头文件和库文件相结合的访问机制。有时候我们只想让别人使用自己实现的功能,并不想公开实现功能的源码,就可以将其制作为库文件,这样用户获取到的是二进制文件,而头文件又只包含声明部分,这样就实现了“将源码隐藏起来”的目的,且不会影响用户使用。
CVM云服务器通过VNC输入正确的密码后无法正常登录,报错Module is unknown
其中,“-shared” 表示要生成的为动态链接库文件; “-soname, libstr.so” 表示生成的动态链接库的别名为“libstr.so”; “-o libstr.so” 表示生成名字为“libstr.so.1”的实际动态链接库文件;
今天我们来聊聊如何在Windows下使用ffmpeg库进行音视开发。一般情况下我很少在Windows下使用ffmpeg, 最主要的原因是在Windows下编译ffmpeg没有在Linux/Mac下编译方便。
Linux中的静态库和动态库简介及生成过程示例 【文章摘要】 在实际的软件开发项目中,不是每一行代码都需要我们亲自写。在我们的软件产品中,有一些代码(尤其是函数)的出现频率很高,它们可以被当作公共代码来反复使用。为了避免重复劳动,我们就把这些公共代码编译为库文件,供需要的程序调用。在Linux中,库分为静态库和动态库两种。 本文对静态库和动态库进行了详细的介绍,并用实际的C代码演示了这两种库的生成过程。 一、静态库和动态库简介 众所周知,程序一般需要经过预处理、编译、汇编和链接这几个步骤才能变成可执行的程
注意:如下命令必须进入到Tomcat的bin目录才能执行。如果你配置好了环境变量就可以在任何路径下执行了。
1. 介绍 使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程
这种要求对于 Linux 系列的平台来说,还是比较好处理的,大部分情况下只需要换一个交叉编译工具链即可,涉及到硬件平台相关部分再嵌入几个内联汇编。
在“纸上谈兵: 算法与数据结构”中,我在每一篇都会有一个C程序,用于实现算法和数据结构 (比如栈和相关的操作)。在同一个程序中,还有用于测试的main()函数,结构体定义,函数原型,typedef等等。 这样的做法非常不“环保”。算法的实际运用和算法的实现混在一起。如果我想要重复使用之前的源程序,必须进行许多改动,并且重新编译。最好的解决方案是实现模块化: 只保留纯粹的算法实现,分离头文件,并编译一个库(library)。每次需要使用库的时候(比如使用栈数据结构),就在程序中include头文件,连接库。这
LAMP架构介绍: MySQL、MariaDB介绍: Community 社区版本 =开源版本 Enterprise 企业版 = 收费版本 GA(Generally Available)
视频观看地址:https://www.100ask.net/detail/p_5f338ae3e4b075dc42ad44a1/8
Linux的目录结构是一个树型结构 Windows 系统 可以拥有多个盘符, 如 C盘、D盘、E盘 Linux 没有盘符 这个概念, 只有一个根目录 /, 所有文件都在它下面
Python调用opencv的原理是:opencv编译出共享库文件,python把这个共享库文件作为一个模块加载并使用。通俗点就是,编译opencv的时候开启python接口选项,编译好了会产生cv2.so(linux下)或者cv2.pyd(windows下)这个共享库文件,python代码中import这个cv2就可以用了。为了能正确import它,往往需要把cv2.so放在python找包能找到的路径下,或者修改PYTHONPATH环境变量让它包含cv2.so所在路径。此外,python的opencv接口中,图像使用numpy数组表示的,所以往往还需要安装numpy、scipy、matplotlib这几个包。
其实cocos工具读取<游戏project文件夹>\proj.android\jni\夹Android.mk文件,。 Android.mk是一个编译文件,它是GNU Makefile的一小部分。是用来向Android NDK描写叙述C和C++源码文件的,怎样进行编译,以及打包等操作。默认的Android.mk文件内容例如以下:
动态链接库,又称为共享链接库。采用动态链接库实现链接操作时,程序文件中哪里需要库文件的功能模块,GCC 编译器不会直接将该功能模块的代码拷贝到文件中,而是将功能模块的位置信息记录到文件中,直接生成可执行文件。这样带来的好处是可执行文件中记录的是功能模块的地址,真正的实现代码会在程序运行时被载入内存,这意味着,即便功能模块被调用多次,使用的都是同一份实现代码(这也是将动态链接库称为共享链接库的原因)。同样这也带来了缺陷,此方式生成的可执行文件无法独立运行,必须借助相应的库文件。
注意,ldd 本身不是一个二进制程序,而是一个 Shell 脚本,使用文本编辑器 vim 可以查看其内容,具体目录可以使用 which 命令查看:
FCN-4是一个应用于音频自动标注的全卷积神经网络。使用该网络完成音频标注任务时,首先需要使用python的音频处理工具包Librosa提取音频的时频特征,针对mp3格式的音频文件,Librosa读取音频文件的工作依赖音频处理后端ffmpeg完成,因此要求使用该网络进行mp3音频自动标注任务的环境具备Librosa依赖库和ffmpeg。
• Red Hat Linux :红帽Linux(企业版+免费版CentOS)
进入http://ffmpeg.org/download.html,如果下载源码,则在右下方:
Qt5.12下载网址: http://download.qt.io/archive/qt/5.12/5.12.2/
我不种田来不种菜,不下海来不钓鱼,不会织布不裁衣,不会行医不问药,这些跟我的生存状态密切相关的技能统统不会,按理我就该饿死、馋死、冻死、病死,反正各种死,但明显我还活着,这就给今天的扯蛋留下了谈资。
该命令会调用编译器程序g++,让他读取main.cpp中的字符串(称为源码),并根据C++标准生成相应的机器指令码,输出到a.out这个文件中,(称为可执行文件)
在交叉编译python3之前需要在ubuntu主机上安装对应的x86版本,因为交叉编译时需要用到python解释器。ubuntu16.04下安装python3.10.5
一、关于Tomcat Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行
在默认登陆的情况下是【/root】路径,我们使用【cd ..】的命令来返回到根目录下。
之前分享过一篇关于 cmake 的入门文章:《使用 cmake 来搭建跨平台的应用程序框架:C语言版本》,那篇文章重点是描述如何利用 cmake 来编译或者构建跨平台的工程,并没有涉及到团队协作开发方面的内容。
对于Android应用开发,大部分情况下我们使用Java就能完整地实现一个应用。但是在某些情况下,我们需要借助C/C++来写JNI本地代码。比如,在使用跨平台的第三方库的时候;为了提升密集计算性能的时候(这种情况下往往还可能会直接使用汇编语言)。因此,这里我将为大家介绍如何给其它开发者创建可供使用的静态库或动态库。而应用开发者如何去连接这些生成的静态库或动态库。由于现在Android Studio已经比较成熟,因此以下描述将基于Android Studio的目录布局。
OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。该程序库也可以使用英特尔公司的IPP进行加速处理。
某日开发说,一台测试用虚机可以PING通SSH不能连了。运维同学就赶紧去查,SSHD_CONFIG配置文件都正确啊,一点错误都没有,那为什么呢?
Windows系统可以拥有多个盘符,如C盘,D盘,E盘 Linux没有盘符这个概念,有类似的分区(一个硬盘分多个分区) Linux所有文件都在’根’目录下 Linux主要目录速查表 /bin:二进制命令所在的目录 /boot:系统引导程序所需要的文件目录,引导系统开机 /dev:设备软件目录,磁盘,光驱 /etc:系统配置,启动程序 /home:普通用户的家,目录默认数据存放目录 /lib:启动系统和运行命令所需的共享库文件和内核模块存放 /mnt:临时挂载存储设备的挂载点,u盘插入光驱无法使用,需要挂
Ghost是一个相对较新的博客发布平台,它开始于众筹平台kickstarter上一个£25,000英镑的众筹项目。尽管WordPress依然是网上主流的博客工具,但它现在已然是一个拥有众多第三方开发功能的通用内容管理平台,发展到现在已经逐渐变得笨重、复杂以至于难以维护。但与此同时,仅仅诞生才几个月的Ghost坚持以用户为中心,打造精雕细琢的用户界面,承诺要做一个纯粹的博客平台。
Linux文件系统采用分层的树形目录结构.即在一个根目录(通常用"/"表示),含有多个子目录或文件;子目录下又含有更下级的子目录或文件信息,一层一层地延伸.构成一棵倒置的树.
链接是将各种代码和数据片段收集并组合为一个单一文件的过程,这个文件可以被加载到内存中执行。
Linux中ldd命令主要用于查看程式运行所需的共享库,那么ldd命令具体要如何使用呢?下面小编就给大家介绍下Linux下ldd命令的使用方法,感兴趣的朋友一起来学习下吧。
XR806 是一颗高集成度无线应用MCU,其集成了ARMv8-M 内核、IEEE 802.11b/g/n Wi-Fi 子系统、BLE 5.0子系统、电源管理系统、高级别的安全系统以及丰富的外设接口,具有优秀的射频性能、稳定性、可靠性和超低功耗。
一位用户正在使用Python脚本运行Java程序,由于脚本执行时间较长,他希望并行运行多个脚本。他在脚本中使用以下代码调用Java程序:
1 . Android 版本目录 : platforms 中存储了各个 Android 版本编译时需要的动态库与静态库资源 , 如 android-29 中就是该版本对应的本地库资源 ;
源码地址为:https://www.openssl.org/source/old/;当前最新版本为 1.1.0f,https://www.openssl.org/source/old/1.1.0/openssl-1.1.0f.tar.gz
我们在编写一个C语言程序的时候,经常会遇到好多重复或常用的部分,如果每次都重新编写固然是可以的,不过那样会大大降低工作效率,并且影响代码的可读性,更不利于后期的代码维护。我们可以把他们制作成相应的功能函数,使用时直接调用就会很方便,还可以进行后期的功能升级。
"/bin":基本系统所需要的命令,功能和"/usr/bin"类似,这个目录下的文件都是可执行的.普通用户也是可以执行的.
更加详细的介绍,可以参照这篇博客:C语言翻译环境:预编译+编译+汇编+链接详解-CSDN博客
领取专属 10元无门槛券
手把手带您无忧上云