linux
小强强-游泳的鱼
这个作者很懒,什么都没留下…
展开
-
ld - The GNU linker
本文是翻译自man ld名称ld - The GNU linker语法ld [options] bobjfile …描述ld 连结许多对象和归档文件(.a),重定位他们的数据,绑定符号引用。通常,编译一个程序的最后一步是运行ldld接受连接器命令行语言文本,提供对链接程序的显式和整体控制。该版本ld使用通用目的的BFD库去操作对象文件。该库允许ld程序以多种不同的格式(例如,COFF或a.out)去读,连结,和写对象文件 .不同的格式可能会被链接到一起去产生任何可用类型的对象文件。得益于它翻译 2020-07-21 19:41:47 · 527 阅读 · 0 评论 -
overlinking问题
什么是overlinking问题例如:当emacs 用支持libpng库(libpng会使用-lz)的选项编译时,我们会链接一个静态的PNG库。但是做动态链接时,会出现问题:如果我们更新了新版本的zlib,emacs必须重新编译,即使emacs不直接使用zlib,只是libpng依赖zlib。怎样检测ldd -u -r% ldd -u -r /usr/bin/emacsUnused direct dependencies: /usr/lib/libXext.so.翻译 2020-07-21 17:39:59 · 74 阅读 · 0 评论 -
用示例来帮助我们更好的理解linux的二次依赖问题
linux libraries本文只是The Linux Documentation Project library howto的简要总结。linux linker 和 loader的man pages 也是很好的信息源。在linux中,有三种类型的库文件:static,shared, dynamically loaded(DL)。动态加载库有一些特定的应用场景,例如插件等。本文将专注与static和 shared 库。Static librariesstatic library 是一些目标文件翻译 2020-07-21 17:01:25 · 717 阅读 · 0 评论 -
[Make] Phony Target
一个phony target 并不是一个文件的名称。使用phony target的2个原因:- 避免与同名文件冲突- 提高性能如果你写了一个没有创建实际目标文件的规则,一旦该目标文件被标记调用,那么它所对应的命令会被执行。clean: rm *.o temp因为rm 命令不会创建名为clean的文件,如果本地也没有一个同名的clean文件,那么你每次调用make clean 时,都会调用rm命令。在上述例子中,如果本地有一个clean文件被创建,那么clean规则不会正常执行。因为它没有必要翻译 2020-07-20 12:00:29 · 397 阅读 · 0 评论 -
librdkafka交叉编译
依赖openssl,需要先交叉编译openssl配置librdkafkaexport CXXFLAGS=-I/data/work/openssl_instasll/includeexport LDFLAGS=-L/data/work/openssl_instasll/lib./configure --prefix=/data/work/rdkafka_install --arch=aarch64 --cc=aarch64-himix100-linux-gcc --cxx=aarch64-himi.原创 2020-07-17 11:44:08 · 1169 阅读 · 0 评论 -
openssl 交叉编译
交叉编译openssl需要交叉编译aarch64版本的openssl,需要在第一个参数位置指定目标架构,–cross-compile-prefix指定了命令前缀,当然这些命令的路径需要在PATH中设置。 ./Configure linux-aarch64 --cross-compile-prefix=aarch64-himix100-linux- --prefix=/data/sqhao/work/openssl_instasll && make && make inst原创 2020-07-16 19:08:52 · 11119 阅读 · 3 评论 -
linux 各目录的作用
linux 的文件系统层次,该文档标准化了各目录的作用。留做参考原创 2020-07-09 15:33:57 · 69 阅读 · 0 评论 -
Option -Bsymbolic 会导致严重副作用
本文是对Option -Bsymbolic can cause dangerous side effects的翻译。-Bsymbolic 可能会解决很多问题。不幸地是,-Bsymbolic也是一个会导致一些副作用的选项。正常情况下,在linux平台上(不使用-Bsymbolic),加载的目标文件中第一次出现的符号将在程序中一直被使用,不论是定义在静态可执行部分,还是在动态目标文件中。这是通过符号抢占(symbol preemption)来实现的。动态加载器构建符号表,所有的动态符号根据该符号表被决议。所翻译 2020-07-08 19:21:36 · 3049 阅读 · 3 评论 -
linux DNS
使用gethostbyname()执行DNS过程#include <netdb.h>#include <sys/socket.h>#include <arpa/inet.h>#include <iostream>int main(int argc,char* argv[]){ struct hostent* h; char buf...原创 2020-05-07 11:47:27 · 128 阅读 · 0 评论 -
linux ext2文件系统
Ext4文件系统也是由相关数据结构组成,按照数据结构存放位置可以分为Ext4磁盘数据结构和Ext4内存数据结构.Ext 磁盘数据结构标准块弹性块从ext4开始,有一个新功能称为弹性块组(flex_bg)。在flex_bg中,几个块组绑在一起,成为一个逻辑块组。flex_bg的第一个块组中的位图空间和inode表空间被扩展为包括flex_bg中所有其他块组的位图和inode表。例如,如...原创 2020-04-23 17:59:58 · 240 阅读 · 0 评论 -
linux inode
分类inode分为内存中的inode和文件系统中的inode,为了避免混淆,我们称前者为VFS inode, 而后者以EXT2为代表,我们称为Ext2 inode。VFS inodeVFS inode包含文件访问权限、属主、组、大小、生成时间、访问时间、最后修改时间等信息。它是linux管理文件系统的最基本单位,也是文件系统连接任何子目录、文件的桥梁。inode结构中的静态信息取自物理设备上...原创 2020-04-22 20:56:36 · 320 阅读 · 0 评论 -
linux stat分析
api#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>int stat(const char *pathname, struct stat *statbuf);int fstat(int fd, struct stat *statbuf);int lstat(const c...原创 2020-04-22 20:16:56 · 201 阅读 · 0 评论 -
linux shell语法
overallshell 脚本也是动态解释型语言,shell脚本第一行指定了脚本解释器#! /bin/sh #! /bin/bash...脚本执行方式./xxx.sh 向二进制可执行程序一样/bin/sh xxx.sh 作为脚本解释器的参数执行变量赋值显示赋值 : var=123 注意=左右不能有空格语句赋值: for file in ls /lib...原创 2020-04-22 13:21:55 · 122 阅读 · 0 评论 -
ubuntu下打开pdf文件
evinceEvince是一种轻量级的文档阅读器,在Gnome桌面环境中是默认安装的。它同样支持包括PDF、Postscript、tiff、XPS、djvu、dvi在内的多种文档格式。evince progit_v2.1.31.pdf...原创 2020-04-21 12:56:31 · 780 阅读 · 0 评论 -
ubuntu设置时区
apt-get install -y tzdata sudo ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime sudo echo Asia/Shanghai > /etc/timezone原创 2020-04-17 12:19:36 · 112 阅读 · 0 评论 -
Ubuntu apt update 签名无效问题
现象:Get:1 http://mirrors.aliyun.com/ubuntu bionic InRelease [242 kB]Get:2 http://mirrors.aliyun.com/ubuntu bionic-backports InRelease [74.6 kB]Get:3 http://mirrors.aliyun.com/ubuntu bionic-proposed ...原创 2020-04-17 12:13:25 · 8091 阅读 · 7 评论 -
linux-execve
EXECVE#include <unistd.h>int execve(const char* filename,char* const argv[],char* const envp[]);描述execve() 执行filename指定的文件,filename必须是二进制文件或者脚本.脚本的第一行需要按照以下的格式:#! interpreter [optional-arg...原创 2020-04-09 00:38:42 · 161 阅读 · 0 评论