网站做的一样算不算侵权百度广告代理商加盟

张小明 2026/1/11 9:21:54
网站做的一样算不算侵权,百度广告代理商加盟,有什么可以做试卷题目的网站,vx网页版#x1f3ac; 胖咕噜的稞达鸭#xff1a;个人主页#x1f525; 个人专栏: 《数据结构》《C初阶高阶》 《Linux系统学习》 《算法日记》⛺️技术的杠杆#xff0c;撬动整个世界! 什么是库#xff1f; 库是写好的可以复用的代码#xff0c;依赖库可以实现某些代码。 静态库… 胖咕噜的稞达鸭个人主页 个人专栏: 《数据结构》《C初阶高阶》《Linux系统学习》《算法日记》⛺️技术的杠杆撬动整个世界!什么是库库是写好的可以复用的代码依赖库可以实现某些代码。静态库.a[Linux] .lib[windows]动态库.so[Linux] .dll[windows]有时候电脑的杀毒软件会杀掉动态库。静态库的制作静态库静态库在程序编译链接时把库的代码链接到可执行文件中程序运行时不再需要静态库。动静态库中要不要包含main函数呢NO不要头文件包含了方法的声明.c文件包含了方法的实现原来所有的库无论是动态还是静态都是源文件对应的.o文件静态库本质上就是很多个.o文件打包形成的。特点生成的可执行文件体积较大运行时不需要外部依赖库更新需要重新编译链接整个程序生成静态库makefilelibmystdio.a: my_stdio.o my_string.o ar -rc $ $^使用静态库# 不同场景下的使用方式 gcc main.c-lmystdio # 系统路径下 gcc main.c-L.-lmymath # 当前目录下 gcc main.c-I头文件路径-L库文件路径-lmymath # 自定义路径[kedaVM-0-4-centos my_stdio]$ ar-rc libmyc.a*.o[kedaVM-0-4-centos my_stdio]$ ll total44-rwxrwxr-x1keda keda13224Jan120:21code-rw-rw-r--1keda keda74Jan114:55Makefile-rw-rw-r--1keda keda3170Jan415:50mylib.a-rw-rw-r--1keda keda1593Jan415:49mystdio.c-rw-rw-r--1keda keda505Jan317:20mystdio.h-rw-rw-r--1keda keda0Jan415:48mystring.c-rw-rw-r--1keda keda0Jan415:48mystring.h-rw-rw-r--1keda keda944Jan415:49mystring.o-rw-rw-r--1keda keda412Jan415:46usercode.c-rw-rw-r--1keda keda2024Jan415:49usercode.o.a静态库本质是一种归档文件不需要使用者解包而是用gcc/g直接进行连接即可。ar -rc libmyc.a *.o | replace and create archive静态库命名规则lib开头.a结尾如果我们要连接这个静态库gcc -o usercode usercode.o -llibmyc.a[kedaVM-0-4-centos my_stdio]$ gcc-o usercode usercode.o-llibmyc.a/usr/bin/ld:cannot find-llibmyc.a collect2:error:ld returned1exit status[kedaVM-0-4-centos my_stdio]$ gcc -o usercode usercode.o -L. -lmyc-L:去哪里找-lmyc:找什么库gcc -o usercode usercode.c -I ./lib/include/ -L ./lib/mylib/ -l mycgcc -I可以指定头文件。gcc -L指定库目录.动态库动态库在程序运行时才链接库的代码多个程序可以共享使用库的代码。特点生成的可执行文件体积较小运行时需要库文件存在库更新无需重新编译程序内存中只需一份副本可被多个进程共享[kedaVM-0-4-centos my_stdio]$ gcc-shared-o libmyc.so*.o[kedaVM-0-4-centos my_stdio]$ ll total56-rwxrwxr-x1keda keda13224Jan514:21code drwxrwxr-x4keda keda4096Jan514:28lib-rwxrwxr-x1keda keda8304Jan514:39libmyc.so-rw-rw-r--1keda keda302Jan514:27makefile-rw-rw-r--1keda keda1593Jan415:49mystdio.c-rw-rw-r--1keda keda505Jan317:20mystdio.h-rw-rw-r--1keda keda0Jan415:48mystring.c-rw-rw-r--1keda keda0Jan415:48mystring.h-rw-rw-r--1keda keda944Jan514:37mystring.o-rw-rw-r--1keda keda412Jan415:46usercode.c-rw-rw-r--1keda keda2080Jan514:37usercode.o[kedaVM-0-4-centos my_stdio]$ file libmyc.so libmyc.so:ELF64-bit LSB shared object,x86-64,version1(SYSV),dynamically linked,BuildID[sha1]94299a5a479b0a7084fad7cba886dba742c0367e,notstrippedlibmyc.a:mystdio.o mystring.o 2 ar -rc $ $^ 3 mystdio.o:mystdio.c 4 gcc -c $ 5 mystring.o:mystring.c 6 gcc -c $ 7 8 .PHONY:output 9 output: 10 mkdir -p lib/include 11 mkdir -p lib/mylib 12 cp -f *.h lib/include 13 cp -f *.a lib/mylib 14 tar czf lib.tgz lib 15 16 .PHONY:clean 17 clean: 18 rm -rf *.o libmyc.a lib lib.tgz操作系统在运行的时候也会寻找动态库[kedaVM-0-4-centos my_stdio]$ echo $LD_LIBRARY_PATH:/home/keda/.VimForCpp/vim/bundle/YCM.so/el7.x86_64动态库的路径搜索问题当程序依赖动态库时需要确保系统能找到这些库文件。常见解决方案拷贝到系统路径/usr/lib、/usr/local/lib、/lib64建立软连接设置环境变量export LD_LIBRARY_PATH/path/to/libsldconfig配置在/etc/ld.so.conf.d/中添加路径执行ldconfig结论g/gcc默认使用的是动态库如果一定要使用静态链接要使用-static一旦-static。就必须存在对应的静态库如果只存在静态库可以执行程序对于该库就只能静态链接了。结论2在Linux系统下默认情况安装的大部分库默认都优先安装动态库。结论3库应用程序 1 n结论4vs不仅形成可执行程序也能形成动静态库。ELF文件格式理解编译链接的关键什么是ELF文件ELFExecutable and Linkable Format是Linux下的可执行文件、目标文件、共享库的标准格式。ELF文件的四种类型可重定位文件.o文件包含代码和数据适合链接可执行文件可直接执行的程序共享目标文件.so文件动态链接库内核转储文件进程执行上下文ELF文件结构一个ELF文件由四部分组成┌─────────────────┐ │ ELF Header │ ← 描述文件特性定位其他部分 ├─────────────────┤ │ Program Headers │ ← 列举所有有效的段及其属性 ├─────────────────┤ │ Sections │ ← 基本组成单位存储特定类型数据 ├─────────────────┤ │ Section Headers │ ← 包含对节的描述 └─────────────────┘常见的重要节Sections.text代码节存储可执行指令.data数据节存储已初始化的全局变量和静态变量.rodata只读数据节.bss未初始化的全局变量和静态变量预留位置.symtab符号表记录函数名、变量名和代码的对应关系.got全局偏移表支持动态链接的关键数据结构两个重要视图链接视图Linking View- 对应节头表将文件按功能模块划分静态链接时关注此视图执行视图Execution View- 对应程序头表告诉操作系统如何加载可执行文件运行加载时使用此视图从源码到可执行程序的过程编译阶段// hello.c #includestdio.h void run(); int main() { printf(hello world!\n); run(); return 0; }编译生成目标文件gcc -c hello.c # 生成 hello.o gcc -c code.c # 生成 code.o目标文件的特点目标文件.o文件是不完整的函数调用地址暂时设为0包含重定位表记录需要修正的地址通过符号表记录未定义的符号链接过程链接器将多个目标文件合并合并相同类型的节如将所有.text节合并修正地址填充函数调用的真实地址生成最终的可执行文件静态链接将所有用到的库代码合并到可执行文件中动态链接在运行时加载和链接库代码动态链接的工作原理GOT和PLT机制由于代码段.text是只读的不能直接修改函数调用地址。动态链接采用以下机制GOT全局偏移表位于.data段可读写存储函数和变量的实际地址PLT过程链接表实现延迟绑定在函数第一次被调用时解析地址动态链接过程程序启动时动态链接器如ld-linux.so加载所需库为每个库确定加载地址填充GOT表记录库中函数的实际地址程序调用函数时通过PLT→GOT→实际函数的路径执行这是在描述多个目标文件.o文件在链接时合并成最终可执行程序main的过程多个独立的目标文件图中显示了四个目标文件每个都有相同的ELF结构ELF Header每个文件都有自己的头部信息Program Header Table程序头表可选目标文件可能没有Sections节包括.text代码节、.data数据节等Section Header Table节头表描述各个节的信息合并后的可执行文件main的ELF格式最终生成的可执行程序各个目标文件的同名节被合并所有.text节合并成新的.text节所有.data节合并成新的.data节其他节也类似合并一个ELF的构成ELF⽂件由以下四部分组成• ELF头(ELF header) 描述文件的主要特性。其位于⽂件的开始位置它的主要⽬的是定位文件的其他部分。• 程序头表(Program header table) 列举了所有有效的段(segments)和他们的属性。表里记着每个段的开始的位置和位移offset、长度毕竟这些段都是紧密的放在⼆进制文中需要段表的描述信息才能把他们每个段分割开。• 节头表(Section header table) 包含对节(sections)的描述。• 节Section ELF文件中的基本组成单位包含了特定类型的数据。ELF文件的各种信息和数据都存储在不同的节中如代码节存储了可执行代码数据节存储了全局变量和静态数据等。这个过程的关键点静态链接的本质链接器将多个目标文件的相同类型的节合并例如code1.o的.text code2.o的.text ... main的.text为什么需要合并减少页面碎片提高内存的使用效率占用的空间少一点此外操作系统在加载程序的时候会将具有相同属性的section合并成一个大的segment这样就可以实现不同的访问权限从而优化内存管理和权限访问控制。举例子权限管理问题.text可执行、.rodata只读→ 合并成只读可执行段.data可读写、.bss可读写→ 合并成可读写段系统只需设置2种权限而不是为每个section单独设置问题问题一静态库是如何形成可执行程序的ELF文件为两个不同的使用者提供了两套说明书一套给链接器怎么做链接一套给操作系统怎么做加载。链接视图节头表给谁用链接器如ld看什么readelf -S hello.o内容.text代码节.data数据节.rodata只读数据节.symtab符号表…等几十个节为什么需要这个视图链接器需要知道“这个.o文件有哪些代码.text、哪些数据.data、哪些符号.symtab”才能正确地把多个.o文件拼起来。执行视图程序头表给谁用操作系统加载器看什么readelf -l a.out内容LOAD Segment 1可执行.text .init …LOAD Segment 2可读写.data .bss .got …为什么需要这个视图操作系统需要知道这个程序应该加载到内存哪里哪些可以执行哪些可以读写才能安全高效地加载程序。[kedaVM-0-4-centos lesson20]$ readelf -h /usr/bin/ls ELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Class: ELF64 Data: 2s complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: Advanced Micro Devices X86-64 Version: 0x1 Entry point address: 0x404324 Start of program headers: 64 (bytes into file) Start of section headers: 115688 (bytes into file) Flags: 0x0 Size of this header: 64 (bytes) Size of program headers: 56 (bytes) Number of program headers: 9 Size of section headers: 64 (bytes) Number of section headers: 30 Section header string table index: 29静态链接就是把库中的.o文件都进行合并并进行统一的编址链接的时候会修改.o中没有确定的函数地址在合并完成之后进行相关call地址完成代码的调用。详细解释文件在编译的时候查看它的反汇编会发现其地址为全0链接的时候将相同属性的数据节进行合并也就是将这个程序需要的所有文件链接在一起并将地址修改了。问题二ELF程序是如何 加载到内存的找到它路径文件名ELF程序是如何转化为进程的逻辑地址物理地址虚拟地址虚拟地址空间一个可执行程序如果没有加载到内存中该可执行程序有没有地址YOU有的对可执行程序完成在磁盘上的编址所有的可执行程序就是一个seg所有的seg所有函数变量编址起始偏移量都从0开始。虚拟地址空间不仅仅是进程看代内存的方式磁盘上的可执行程序代码和数据编址其实就是虚拟地址的统一编址。操作系统支持编译器也要支持。cpu怎么知道你的可执行程序的起始地址是什么也就是说CPU怎么知道从哪里 开始执行的呢进入到CPU中的地址全部都是虚拟地址CPU执行流程步骤1操作系统告诉CPU// 进程创建时操作系统设置 PCB.entry_point 0x1060; // 程序入口地址 CPU.PC 0x1060; // 设置程序计数器步骤2CPU获取指令CPU: 我要执行0x1060处的指令 MMU: 0x1060是虚拟地址我来查页表... MMU: 对应物理地址是0x12345678 CPU: 好我从0x12345678取指令执行实用命令总结查看文件信息file a.out # 查看文件类型 readelf -h a.out # 查看ELF头 readelf -l a.out # 查看程序头表 readelf -S a.out # 查看节头表 objdump -d a.out # 反汇编代码段查看依赖关系ldd a.out # 查看动态库依赖 nm a.out # 查看符号表库操作ar -t libxxx.a # 列出静态库内容 ar -rc libxxx.a *.o # 创建静态库 gcc -shared -fPIC -o libxxx.so *.o # 创建动态库
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

es网站建设网站外包多少钱

为什么选择开源输入法:保护隐私的终极安全方案 【免费下载链接】openboard 项目地址: https://gitcode.com/gh_mirrors/op/openboard 在数字时代,我们的每一次键盘输入都可能成为数据收集的目标。OpenBoard作为一款完全开源的Android输入法应用&…

张小明 2026/1/9 12:46:11 网站建设

网站推广可采用的方法有哪些忻州推广型网站建设

2025年Mac微信效率革命:WeChatExtension插件全面解析 【免费下载链接】WeChatExtension-ForMac Mac微信功能拓展/微信插件/微信小助手(A plugin for Mac WeChat) 项目地址: https://gitcode.com/gh_mirrors/we/WeChatExtension-ForMac 还在为Mac微信的功能限…

张小明 2026/1/10 3:19:15 网站建设

散文网站模板做网站遇到竞争对手怎么办

LeagueAkari自动启动功能完整指南:从新手到精通 【免费下载链接】LeagueAkari ✨兴趣使然的,功能全面的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/LeagueAkari LeagueAkari的自…

张小明 2026/1/9 18:10:04 网站建设

河南网络建站在线培训系统搭建方案

UNIX系统基础:网络、文件与安全详解 1. 网络配置与服务管理 在UNIX系统中,网络配置和服务管理是系统正常运行的关键部分。首先, resolv.conf 文件用于配置域名解析服务。以下是一个 resolv.conf 文件的示例: ; /etc/resolv.conf domain foo.bar.org ; default doma…

张小明 2026/1/10 2:50:23 网站建设

备案网站多少钱wordpress 搜索 任意

TensorFlow中的批归一化(BatchNorm)作用机制剖析 在构建深度神经网络时,你是否遇到过这样的情况:模型刚开始训练就出现梯度爆炸,损失值直接“飞”出屏幕;或者训练过程抖动剧烈,收敛极其缓慢&am…

张小明 2026/1/10 18:20:58 网站建设

陕西城乡建设厅网站深圳市出行最新政策

如何快速搭建个人在线无线电接收站:OpenWebRX终极指南 【免费下载链接】openwebrx Open source, multi-user SDR receiver software with a web interface 项目地址: https://gitcode.com/gh_mirrors/open/openwebrx 还在为复杂的无线电设备调试而烦恼吗&…

张小明 2026/1/10 16:04:22 网站建设