linux下nm,objdump和ldd三大工具使用

news/2024/5/7 5:00:54/文章来源:https://blog.csdn.net/hsy12342611/article/details/129322929

       linux下进行C/C++开发时经常需要使用nm,objdump,ldd工具来分析定位问题,本篇文章就对其做个总结:

1.测试程序

TestSo.h

#pragma once
#include <iostream>extern "C" int CTypeAdd(int x, int y);
extern "C" int CTypeSub(int x, int y);int TestAdd(const int &a, const int &b);
int TestSub(const int &a, const int &b);class TestClass {
public:TestClass();~TestClass();int getIvalue();std::string getSvalue();void showValue();private:int m_iValue;std::string m_sValue;
};

TestSo.cpp

#include "TestSo.h"int CTypeAdd(int x, int y) {return x + y;
}int CTypeSub(int x, int y) {return x - y;
}int TestAdd(const int &a, const int &b) {return a + b;
}int TestSub(const int &a, const int &b) {return a - b;
}TestClass::TestClass() {m_iValue = 110;m_sValue = "My Test So";
}TestClass::~TestClass() {}int TestClass::getIvalue() {return m_iValue;
}std::string TestClass::getSvalue() {return m_sValue;
}void TestClass::showValue() {std::cout << m_sValue.c_str() << "  " << m_iValue << std::endl;
}

main.cpp

#include <iostream>
#include "TestSo.h"using namespace std;int main() {std::cout << "start main ..." << std::endl;std::cout << "========== C type call ==========" << std::endl;std::cout << CTypeAdd(1, 2) << "  " << CTypeSub(1, 2) << std::endl;std::cout << "========== C++ type call ==========" << std::endl;std::cout << TestAdd(111, 222) << "  " << TestSub(111, 222) << std::endl;TestClass test;test.showValue();std::cout << test.getIvalue() << " " << test.getSvalue() << std::endl;return 0;
}

生成so动态库:
g++ -std=c++11 -g TestSo.cpp -fPIC -shared -o libTestSo.so

生成可执行程序:

g++ -std=c++11 main.cpp -L. -lTestSo -o main

程序运行结果如下:

 export LD_LIBRARY_PATH=.

./main

 

程序目录结构如下:

 

2.objdump


       objdump是一个gcc工具, 可以查看目标文件或者可执行文件的各个段信息。可以显示有关文件的大量不同信息。 objdump也可以显示符号,并且在联机帮助页中明确指出“这与nm程序提供的信息类似,但显示格式不同”
常用命令:objdump -tT libTestSo.so

objdump -tT libTestSo.so 显示如下:

libTestSo.so:     file format elf64-x86-64

SYMBOL TABLE:
00000000000001c8 l    d  .note.gnu.build-id     0000000000000000              .note.gnu.build-id
00000000000001f0 l    d  .gnu.hash      0000000000000000              .gnu.hash
0000000000000260 l    d  .dynsym        0000000000000000              .dynsym
00000000000005c0 l    d  .dynstr        0000000000000000              .dynstr
0000000000000992 l    d  .gnu.version   0000000000000000              .gnu.version
00000000000009e0 l    d  .gnu.version_r 0000000000000000              .gnu.version_r
0000000000000a60 l    d  .rela.dyn      0000000000000000              .rela.dyn
0000000000000b80 l    d  .rela.plt      0000000000000000              .rela.plt
0000000000000c88 l    d  .init  0000000000000000              .init
0000000000000ca0 l    d  .plt   0000000000000000              .plt
0000000000000d60 l    d  .plt.got       0000000000000000              .plt.got
0000000000000d70 l    d  .text  0000000000000000              .text
0000000000001034 l    d  .fini  0000000000000000              .fini
000000000000103d l    d  .rodata        0000000000000000              .rodata
000000000000104c l    d  .eh_frame_hdr  0000000000000000              .eh_frame_hdr
00000000000010c0 l    d  .eh_frame      0000000000000000              .eh_frame
00000000000012a4 l    d  .gcc_except_table      0000000000000000              .gcc_except_table
0000000000201dd0 l    d  .init_array    0000000000000000              .init_array
0000000000201de0 l    d  .fini_array    0000000000000000              .fini_array
0000000000201de8 l    d  .dynamic       0000000000000000              .dynamic
0000000000201fc8 l    d  .got   0000000000000000              .got
0000000000202000 l    d  .got.plt       0000000000000000              .got.plt
0000000000202070 l    d  .data  0000000000000000              .data
0000000000202080 l    d  .bss   0000000000000000              .bss
0000000000000000 l    d  .comment       0000000000000000              .comment
0000000000000000 l    d  .debug_aranges 0000000000000000              .debug_aranges
0000000000000000 l    d  .debug_info    0000000000000000              .debug_info
0000000000000000 l    d  .debug_abbrev  0000000000000000              .debug_abbrev
0000000000000000 l    d  .debug_line    0000000000000000              .debug_line
0000000000000000 l    d  .debug_str     0000000000000000              .debug_str
0000000000000000 l    df *ABS*  0000000000000000              crtstuff.c
0000000000000d70 l     F .text  0000000000000000              deregister_tm_clones
0000000000000db0 l     F .text  0000000000000000              register_tm_clones
0000000000000e00 l     F .text  0000000000000000              __do_global_dtors_aux
0000000000202080 l     O .bss   0000000000000001              completed.7698
0000000000201de0 l     O .fini_array    0000000000000000              __do_global_dtors_aux_fini_array_entry
0000000000000e40 l     F .text  0000000000000000              frame_dummy
0000000000201dd0 l     O .init_array    0000000000000000              __frame_dummy_init_array_entry
0000000000000000 l    df *ABS*  0000000000000000              TestSo.cpp
000000000000103d l     O .rodata        0000000000000001              _ZStL19piecewise_construct
0000000000202081 l     O .bss   0000000000000001              _ZStL8__ioinit
0000000000000fd6 l     F .text  0000000000000049              _Z41__static_initialization_and_destruction_0ii
000000000000101f l     F .text  0000000000000015              _GLOBAL__sub_I_TestSo.cpp
0000000000000000 l    df *ABS*  0000000000000000              crtstuff.c
00000000000012a0 l     O .eh_frame      0000000000000000              __FRAME_END__
0000000000000000 l    df *ABS*  0000000000000000              
0000000000202078 l     O .data  0000000000000008              DW.ref.__gxx_personality_v0
000000000000104c l       .eh_frame_hdr  0000000000000000              __GNU_EH_FRAME_HDR
0000000000202000 l     O .got.plt       0000000000000000              _GLOBAL_OFFSET_TABLE_
0000000000202080 l     O .data  0000000000000000              __TMC_END__
0000000000202070 l     O .data  0000000000000000              __dso_handle
0000000000201de8 l     O .dynamic       0000000000000000              _DYNAMIC
0000000000000e70 g     F .text  000000000000001c              _Z7TestAddRKiS0_
0000000000000000       F *UND*  0000000000000000              _ZNSolsEi@@GLIBCXX_3.4
0000000000000f30 g     F .text  0000000000000010              _ZN9TestClass9getIvalueEv
0000000000000000  w      *UND*  0000000000000000              __gmon_start__
0000000000001034 g     F .fini  0000000000000000              _fini
0000000000000000       F *UND*  0000000000000000              _ZNSt8ios_base4InitC1Ev@@GLIBCXX_3.4
0000000000000000       F *UND*  0000000000000000              __cxa_atexit@@GLIBC_2.2.5
0000000000000000       F *UND*  0000000000000000              _ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4
0000000000000000  w      *UND*  0000000000000000              _ITM_deregisterTMCloneTable
0000000000000000       F *UND*  0000000000000000              _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@@GLIBCXX_3.4
0000000000000000       F *UND*  0000000000000000              _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.21
0000000000000e4a g     F .text  0000000000000014              CTypeAdd
0000000000000000  w      *UND*  0000000000000000              _ITM_registerTMCloneTable
0000000000000000       F *UND*  0000000000000000              _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21
0000000000000f40 g     F .text  000000000000002d              _ZN9TestClass9getSvalueB5cxx11Ev
0000000000000000  w    F *UND*  0000000000000000              __cxa_finalize@@GLIBC_2.2.5
0000000000000f6e g     F .text  0000000000000068              _ZN9TestClass9showValueEv
0000000000000f10 g     F .text  000000000000001f              _ZN9TestClassD1Ev
0000000000000e5e g     F .text  0000000000000012              CTypeSub
0000000000000eaa g     F .text  0000000000000065              _ZN9TestClassC2Ev
0000000000000000       O *UND*  0000000000000000              _ZSt4cout@@GLIBCXX_3.4
0000000000000e8c g     F .text  000000000000001e              _Z7TestSubRKiS0_
0000000000000f10 g     F .text  000000000000001f              _ZN9TestClassD2Ev
0000000000202080 g       .bss   0000000000000000              __bss_start
0000000000000eaa g     F .text  0000000000000065              _ZN9TestClassC1Ev
0000000000202088 g       .bss   0000000000000000              _end
0000000000000000       F *UND*  0000000000000000              _ZNSolsEPFRSoS_E@@GLIBCXX_3.4
0000000000000000       F *UND*  0000000000000000              _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv@@GLIBCXX_3.4.21
0000000000000000       F *UND*  0000000000000000              _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_@@GLIBCXX_3.4
0000000000000000       F *UND*  0000000000000000              _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1ERKS4_@@GLIBCXX_3.4.21
0000000000202080 g       .data  0000000000000000              _edata
0000000000000000       F *UND*  0000000000000000              __gxx_personality_v0@@CXXABI_1.3
0000000000000000       F *UND*  0000000000000000              _Unwind_Resume@@GCC_3.0
0000000000000c88 g     F .init  0000000000000000              _init
0000000000000000       F *UND*  0000000000000000              _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc@@GLIBCXX_3.4.21


DYNAMIC SYMBOL TABLE:
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 _ZNSolsEi
0000000000000000  w   D  *UND*  0000000000000000              __gmon_start__
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 _ZNSt8ios_base4InitC1Ev
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 __cxa_atexit
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 _ZNSt8ios_base4InitD1Ev
0000000000000000  w   D  *UND*  0000000000000000              _ITM_deregisterTMCloneTable
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1Ev
0000000000000000  w   D  *UND*  0000000000000000              _ITM_registerTMCloneTable
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev
0000000000000000  w   DF *UND*  0000000000000000  GLIBC_2.2.5 __cxa_finalize
0000000000000000      DO *UND*  0000000000000000  GLIBCXX_3.4 _ZSt4cout
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 _ZNSolsEPFRSoS_E
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4 _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1ERKS4_
0000000000000000      DF *UND*  0000000000000000  CXXABI_1.3  __gxx_personality_v0
0000000000000000      DF *UND*  0000000000000000  GCC_3.0     _Unwind_Resume
0000000000000000      DF *UND*  0000000000000000  GLIBCXX_3.4.21 _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc
0000000000000e70 g    DF .text  000000000000001c  Base        _Z7TestAddRKiS0_
0000000000000f30 g    DF .text  0000000000000010  Base        _ZN9TestClass9getIvalueEv
0000000000000e4a g    DF .text  0000000000000014  Base        CTypeAdd
0000000000202088 g    D  .bss   0000000000000000  Base        _end
0000000000202080 g    D  .data  0000000000000000  Base        _edata
0000000000000f40 g    DF .text  000000000000002d  Base        _ZN9TestClass9getSvalueB5cxx11Ev
0000000000000e5e g    DF .text  0000000000000012  Base        CTypeSub
0000000000000e8c g    DF .text  000000000000001e  Base        _Z7TestSubRKiS0_
0000000000202080 g    D  .bss   0000000000000000  Base        __bss_start
0000000000000c88 g    DF .init  0000000000000000  Base        _init
0000000000001034 g    DF .fini  0000000000000000  Base        _fini
0000000000000f6e g    DF .text  0000000000000068  Base        _ZN9TestClass9showValueEv
0000000000000f10 g    DF .text  000000000000001f  Base        _ZN9TestClassD1Ev
0000000000000eaa g    DF .text  0000000000000065  Base        _ZN9TestClassC2Ev
0000000000000f10 g    DF .text  000000000000001f  Base        _ZN9TestClassD2Ev
0000000000000eaa g    DF .text  0000000000000065  Base        _ZN9TestClassC1Ev
 

3.nm


       nm是linux中用来列出目标文件的符号清单,也是一个gcc工具
常用命令:nm -AD libTestSo.so 
常用的options:
-A 在每个符号信息的前面打印所在对象文件名称;
-C 输出demangle过了的符号名称;
-D 打印动态符号;
-l 使用对象文件中的调试信息打印出所在源文件及行号;使用 -l 时,必须保证你的对象文件中带有符号调式信息,这一般要求你在编译的时候指定一个 -g 选项,见 Linux:Gcc。
-n 按照地址/符号值来排序;
-u 打印出那些未定义的符号;
使用nm前,最好先用Linux的file查看对象文件所属处理器架构,然后再用相应交叉版本的nm工具。
so符号表中的U t d b r B含义
U:代表so中调用了这个接口,但没有具体实现
T:代表so中有该函数的具体实现代码
列出My.so中未定义的符号
nm -u libTestSo.so  显示如下:

libTestSo.so:0000000000202080 B __bss_start
libTestSo.so:0000000000000e4a T CTypeAdd
libTestSo.so:0000000000000e5e T CTypeSub
libTestSo.so:                 U __cxa_atexit
libTestSo.so:                 w __cxa_finalize
libTestSo.so:0000000000202080 D _edata
libTestSo.so:0000000000202088 B _end
libTestSo.so:0000000000001034 T _fini
libTestSo.so:                 w __gmon_start__
libTestSo.so:                 U __gxx_personality_v0
libTestSo.so:0000000000000c88 T _init
libTestSo.so:                 w _ITM_deregisterTMCloneTable
libTestSo.so:                 w _ITM_registerTMCloneTable
libTestSo.so:                 U _Unwind_Resume
libTestSo.so:0000000000000e70 T _Z7TestAddRKiS0_
libTestSo.so:0000000000000e8c T _Z7TestSubRKiS0_
libTestSo.so:0000000000000f30 T _ZN9TestClass9getIvalueEv
libTestSo.so:0000000000000f40 T _ZN9TestClass9getSvalueB5cxx11Ev
libTestSo.so:0000000000000f6e T _ZN9TestClass9showValueEv
libTestSo.so:0000000000000eaa T _ZN9TestClassC1Ev
libTestSo.so:0000000000000eaa T _ZN9TestClassC2Ev
libTestSo.so:0000000000000f10 T _ZN9TestClassD1Ev
libTestSo.so:0000000000000f10 T _ZN9TestClassD2Ev
libTestSo.so:                 U _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv
libTestSo.so:                 U _ZNSolsEi
libTestSo.so:                 U _ZNSolsEPFRSoS_E
libTestSo.so:                 U _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc
libTestSo.so:                 U _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1ERKS4_
libTestSo.so:                 U _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1Ev
libTestSo.so:                 U _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEED1Ev
libTestSo.so:                 U _ZNSt8ios_base4InitC1Ev
libTestSo.so:                 U _ZNSt8ios_base4InitD1Ev
libTestSo.so:                 U _ZSt4cout
libTestSo.so:                 U _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
libTestSo.so:                 U _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc

4.ldd


ldd用来打印或者查看程序运行所需的共享库,常用来解决程序因缺少某个库文件而不能运行的一些问题。ldd不是一个可执行程序,而只是一个shell脚本。
--help 获取指令帮助信息;
--version 打印指令版本号;
-d,–data-relocs 执行重定位和报告任何丢失的对象;
-r, --function-relocs 执行数据对象和函数的重定位,并且报告任何丢失的对象和函数;
-u, --unused 打印未使用的直接依赖;
-v, --verbose 详细信息模式,打印所有相关信息;

ldd  libTestSo.so  显示如下:

        linux-vdso.so.1 (0x00007fff00f73000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fa90af47000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa90ad2f000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa90a93e000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa90a5a0000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fa90b4d3000)

//关于linux下动态库的使用可以参考如下博客:
https://www.dandelioncloud.cn/article/details/1571390345416241154

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_77097.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 之网络式编程

一 客户端/服务器架构 即C/S架构&#xff0c;包括 1、硬件C/S架构&#xff08;打印机&#xff09; 2、软件B/S架构&#xff08;web服务&#xff09; C/S架构与Socket的关系&#xff1a; 我们学习Socket就是为了完成C/S的开发 二 OSI七层 引子&#xff1a;   计算机组成…

云HIS系统源码 医院his源码 云his源码

大型医院his系统源码 SaaS运维平台多医院入驻强大的电子病历完整文档 &#xff0c;有演示 一、系统概述&#xff1a; 基层卫生健康云是一款满足基层医疗机构各类业务需要的健康云产品。该产品能帮助基层医疗机构完成日常各类业务&#xff0c;提供病患挂号支持、病患问诊、电子…

python学习——【第一弹】

前言 Python是一种跨平台的计算机程序设计语言&#xff0c;是ABC语言的替代品&#xff0c;属于面向对象的动态类型语言&#xff0c;最初被设计用于编写自动化脚本&#xff0c;随着版本的不断更新和语言新功能的添加&#xff0c;越来越多被用于独立的、大型项目的开发。 从这篇…

轮盘赌选择法

轮盘赌选择原理 轮盘赌选择法&#xff08;roulette wheel selection&#xff09;是最简单也是最常用的选择方法&#xff0c;在该方法中&#xff0c;各个个体的选择概率和其适应度值成比例&#xff0c;适应度越大&#xff0c;选中概率也越大。 从图中可以看出一等奖、二等奖、…

【Java集合框架】篇六:Collections工具类

Collections 是一个操作 Set、List 和 Map 等集合的工具类。 1。 常用方法 Collections 中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作&#xff0c;还提供了对集合对象设置不可变、对集合对象实现同步控制等方法&#xff08;均为static方法&#xff09;&…

【Python学习笔记】第二十六节 Python PyMySQL

一、什么是 PyMySQL&#xff1f;PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库。可以用它来连接Python和MySQL。如果你追求速度&#xff0c;这是一个很好的选择&#xff0c;因为它比mysql-connector-python快。PyMySQL 遵循 Python 数据库 API v2.0 规范&#x…

AntDB“超融合+流式实时数仓”,谈传统数据库与流计算的有机融合

&#xff08;一&#xff09; 前言 据统计&#xff0c;在信息化时代的今天&#xff0c;人们一天所接触到的信息量&#xff0c;是古人一辈子所能接收到的信息量的总和。当今社会中除了信息量“多”以外&#xff0c;人们对信息处理的“效率”和“速度”的要求也越来越高。譬如&am…

浅谈一下mysql8.0与5.7的字符集

修改字符集 修改步骤 在MySQL8.0版本之前&#xff0c;默认字符集为1atin1,utf8字符集指向的是utf8mb3。网站开发人员在数据库设计的时候往往会将编码修改为ut8字符集。如果遗忘修改默认的编码&#xff0c;就会出现乱码的问题。从MySQL8.0开始&#xff0c;数据库的默认编码将改…

王道C语言督学营OJ练习全解【24考研最新版】

前言 本篇博客是在博主参加王道408专业课前置课程-----C语言督学营的学习笔记&#xff0c;包含了从第一节课到最后一节课的所有OJ习题题解&#xff0c;文章中每一题都给出了详尽的代码&#xff0c;并在每一题的关键部位加上了注释&#xff0c;记录下来的目的是方便自己以后进行…

maven镜像源及代理配置

在公司使用网络一般需要设置代理&#xff0c; 我在idea中创建springboot工程时&#xff0c;发现依赖下载不了&#xff0c;原以为只要浏览器设置代理&#xff0c;其他的网络访问都会走代理&#xff0c;经过查资料设置了以下几个地方后工程创建正常&#xff0c;在此记录给大家参考…

Python中Opencv和PIL.Image读取图片的差异对比

近日&#xff0c;在进行深度学习进行推理的时候&#xff0c;发现不管怎么样都得不出正确的结果&#xff0c;再仔细和正确的代码进行对比了后发现原来是Python中不同的库读取的图片数组是有差异的。 image np.array(Image.open(image_file).convert(RGB)) image cv2.imread(…

SpringBoot实现Excel导入导出,简单好用

EasyPoi简介 POI是Java操作MicroOffice&#xff08;如对Excel的导入导出&#xff09;的一个插件。POI的全称是&#xff08;Poor Obfuscation Implementation&#xff09;&#xff0c;POI官网地址是 http://poi.achache.org/index.html 。 EasyPoi对POI进行了优化&#xff0c;…

Navicat 现已支持 OceanBase 全线数据库产品

Navicat 作为 OceanBase 生态工具的合作伙伴&#xff0c;这是双方产品适配第三个里程碑。2022 年 7 月的首个里程碑&#xff0c;Navicat 实现了 OceanBase 社区版的功能性兼容。同年10 月&#xff0c;进一步实现了针对 OceanBase 企业版&#xff08; 兼容 MySQL 模式&#xff0…

嵌入式学习笔记——STM32单片机开发前的准备

STM32单片机开发前的准备1.集成开发环境的选取STM32 CubeIDEKEIL_MDK2.KEIL_MDK环境搭建安装包获取及安装芯片包下载及安装工程建立(STM32F407VET6为例)1.新建工程文件夹2.新建工程3.安装ST-LINK以及CH340的驱动4.设置KEIL&#xff0c;并烧录本文重点1.集成开发环境的选取 前面…

使用Containerd搭建K8s集群【v1.25】

[toc] 一、安装要求 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 一台或多台机器,操作系统 CentOS7.x-86_x64硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多集群中所有机器之间网络互通可以访问外网,需要拉取镜像禁止swap分区二、准备环境 角色IP…

权限管理系统设计——入门(一)

权限管理系统设计——入门&#xff08;一&#xff09; 后续更新中… 概念 1、身份认证&#xff1a;用户是否是合法。 2、限制资源访问&#xff1a;根据系统设置的安全规则或者安全策略&#xff0c;用户可以访问而且只能访问自己被授权的资源。 3、用途广&#xff1a;出现在任何…

MySQL中varchar(M)存储字符串过长

最近写项目&#xff0c;数据库报了一个错&#xff0c;错误原因是MySQL中存储的字符串过长最近在学MySQL的基础&#xff0c;刚好学到了关于varchar类型要存储的字符串是 “<p>12121212121212</p>\n<p><img src\"https://zzjzzjzzjbucket.oss-cn-hangz…

【markdown】markdown语法

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

【iobit 软件】家族系列 - 正版激活码

装机必备iobit系列软件 - 激活码获取看最后 第一款、Advanced SystemCare 16 您需要的人工智能驱动的PC优化器&#xff0c;以释放磁盘空间&#xff0c;加速PC并保护在线隐私。 功能特点&#xff1a; 1. 系统清理与优化&#xff1a;通过清除系统垃圾文件、注册表信息、无用文…

【halcon】模板匹配参数之金字塔级数

背景 今天&#xff0c;在使用模板匹配的时候&#xff0c;突然程序卡死&#xff0c;CPU直接飙到100%。最后排查发现是模板匹配其中一个参数 NumLevels 导致的&#xff1a; NumLevels: The number of pyramid levels used during the search is determined with numLevels. If n…