musl libc库的编译以及malloc mutex实现简析

2023-10-15 07:40

本文主要是介绍musl libc库的编译以及malloc mutex实现简析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.下载,解压musl libc库:

2.配置/编译:

./configure && make

或者./configure --prefix=/home/caozilong/Workspace/linux/musl/install && make

编译:

生成的库文件:

如果指定--prefix,则 make install 会安装头文件和库到指定目录:

可以看到,除了几个.o以及libc.a和libc.so有内容之外,其它的库都是空实现,这点和GLIBC有所不同,大概原因可能是MUSL将主要实现放在LIBC里面,而通过符号连接或者STUB的方式引用其他的库。

删除编译结果:make clean

验证:

最后一部在obj目录下生成的musl-gcc可执行文件,是对GCC的一个包装,用来编译基于musl的应用程序.

musl-gcc是一个脚本文件,在脚本中,对gcc的specs文件进行了替换,替换为musl的,这样,使用此脚本编译的程序就不会链接系统内的库了。

我们写一个应用:

编译:

./obj/musl-gcc -static main.c -Wl,-Map=linker.map

 运行:

查看map 文件

libc.so编译过程:

gcc -std=c99 -nostdinc -ffreestanding -fexcess-precision=standard -frounding-math -Wa,--noexecstack -D_XOPEN_SOURCE=700 -I./arch/x86_64 -I./arch/generic -Iobj/src/internal -I./src/include -I./src/internal -Iobj/include -I./include  -Os -pipe -fomit-frame-pointer -fno-unwind-tables -fno-asynchronous-unwind-tables -ffunction-sections -fdata-sections -Wno-pointer-to-int-cast -Werror=implicit-function-declaration -Werror=implicit-int -Werror=pointer-sign -Werror=pointer-arith -Werror=int-conversion -Werror=incompatible-pointer-types -Werror=discarded-qualifiers -Werror=discarded-array-qualifiers -Waddress -Warray-bounds -Wchar-subscripts -Wduplicate-decl-specifier -Winit-self -Wreturn-type -Wsequence-point -Wstrict-aliasing -Wunused-function -Wunused-label -Wunused-variable  -fno-stack-protector -fno-stack-protector -fPIC -c -o obj/ldso/dlstart.lo ldso/dlstart.c
gcc -std=c99 -nostdinc -ffreestanding -fexcess-precision=standard -frounding-math -Wa,--noexecstack -D_XOPEN_SOURCE=700 -I./arch/x86_64 -I./arch/generic -Iobj/src/internal -I./src/include -I./src/internal -Iobj/include -I./include  -Os -pipe -fomit-frame-pointer -fno-unwind-tables -fno-asynchronous-unwind-tables -ffunction-sections -fdata-sections -Wno-pointer-to-int-cast -Werror=implicit-function-declaration -Werror=implicit-int -Werror=pointer-sign -Werror=pointer-arith -Werror=int-conversion -Werror=incompatible-pointer-types -Werror=discarded-qualifiers -Werror=discarded-array-qualifiers -Waddress -Warray-bounds -Wchar-subscripts -Wduplicate-decl-specifier -Winit-self -Wreturn-type -Wsequence-point -Wstrict-aliasing -Wunused-function -Wunused-label -Wunused-variable  -fno-stack-protector -fno-stack-protector -fPIC -c -o obj/ldso/dynlink.lo ldso/dynlink.c
gcc -std=c99 -nostdinc -ffreestanding -fexcess-precision=standard -frounding-math -Wa,--noexecstack -D_XOPEN_SOURCE=700 -I./arch/x86_64 -I./arch/generic -Iobj/src/internal -I./src/include -I./src/internal -Iobj/include -I./include  -Os -pipe -fomit-frame-pointer -fno-unwind-tables -fno-asynchronous-unwind-tables -ffunction-sections -fdata-sections -Wno-pointer-to-int-cast -Werror=implicit-function-declaration -Werror=implicit-int -Werror=pointer-sign -Werror=pointer-arith -Werror=int-conversion -Werror=incompatible-pointer-types -Werror=discarded-qualifiers -Werror=discarded-array-qualifiers -Waddress -Warray-bounds -Wchar-subscripts -Wduplicate-decl-specifier -Winit-self -Wreturn-type -Wsequence-point -Wstrict-aliasing -Wunused-function -Wunused-label -Wunused-variable  -Wl,--sort-section,alignment -Wl,--sort-common -Wl,--gc-sections -Wl,--hash-style=both -Wl,--no-undefined -Wl,--exclude-libs=ALL -Wl,--dynamic-list=./dynamic.list  -nostdlib -shared \
-Wl,-e,_dlstart -o lib/libc.so obj/src/aio/aio.lo obj/src/aio/aio_suspend.lo obj/src/aio/lio_listio.lo obj/src/complex/__cexp.lo obj/src/complex/__cexpf.lo obj/src/complex/cabs.lo obj/src/complex/cabsf.lo obj/src/complex/cabsl.lo obj/src/complex/cacos.lo obj/src/complex/cacosf.lo obj/src/complex/cacosh.lo obj/src/complex/cacoshf.lo obj/src/complex/cacoshl.lo obj/src/complex/cacosl.lo obj/src/complex/carg.lo obj/src/complex/cargf.lo obj/src/complex/cargl.lo obj/src/complex/casin.lo obj/src/complex/casinf.lo obj/src/complex/casinh.lo obj/src/complex/casinhf.lo obj/src/complex/casinhl.lo obj/src/complex/casinl.lo obj/src/complex/catan.lo obj/src/complex/catanf.lo obj/src/complex/catanh.lo obj/src/complex/catanhf.lo obj/src/complex/catanhl.lo obj/src/complex/catanl.lo obj/src/complex/ccos.lo obj/src/complex/ccosf.lo obj/src/complex/ccosh.lo obj/src/complex/ccoshf.lo obj/src/complex/ccoshl.lo obj/src/complex/ccosl.lo obj/src/complex/cexp.lo obj/src/complex/cexpf.lo obj/src/complex/cexpl.lo obj/src/complex/cimag.lo obj/src/complex/cimagf.lo obj/src/complex/cimagl.lo obj/src/complex/clog.lo obj/src/complex/clogf.lo obj/src/complex/clogl.lo obj/src/complex/conj.lo obj/src/complex/conjf.lo obj/src/complex/conjl.lo obj/src/complex/cpow.lo obj/src/complex/cpowf.lo obj/src/complex/cpowl.lo obj/src/complex/cproj.lo obj/src/complex/cprojf.lo obj/src/complex/cprojl.lo obj/src/complex/creal.lo obj/src/complex/crealf.lo obj/src/complex/creall.lo obj/src/complex/csin.lo obj/src/complex/csinf.lo obj/src/complex/csinh.lo obj/src/complex/csinhf.lo obj/src/complex/csinhl.lo obj/src/complex/csinl.lo obj/src/complex/csqrt.lo obj/src/complex/csqrtf.lo obj/src/complex/csqrtl.lo obj/src/complex/ctan.lo obj/src/complex/ctanf.lo obj/src/complex/ctanh.lo obj/src/complex/ctanhf.lo obj/src/complex/ctanhl.lo obj/src/complex/ctanl.lo obj/src/conf/confstr.lo obj/src/conf/fpathconf.lo obj/src/conf/legacy.lo obj/src/conf/pathconf.lo obj/src/conf/sysconf.lo obj/src/crypt/crypt.lo obj/src/crypt/crypt_blowfish.lo obj/src/crypt/crypt_des.lo obj/src/crypt/crypt_md5.lo obj/src/crypt/crypt_r.lo obj/src/crypt/crypt_sha256.lo obj/src/crypt/crypt_sha512.lo obj/src/crypt/encrypt.lo obj/src/ctype/__ctype_b_loc.lo obj/src/ctype/__ctype_get_mb_cur_max.lo obj/src/ctype/__ctype_tolower_loc.lo obj/src/ctype/__ctype_toupper_loc.lo obj/src/ctype/isalnum.lo obj/src/ctype/isalpha.lo obj/src/ctype/isascii.lo obj/src/ctype/isblank.lo obj/src/ctype/iscntrl.lo obj/src/ctype/isdigit.lo obj/src/ctype/isgraph.lo obj/src/ctype/islower.lo obj/src/ctype/isprint.lo obj/src/ctype/ispunct.lo obj/src/ctype/isspace.lo obj/src/ctype/isupper.lo obj/src/ctype/iswalnum.lo obj/src/ctype/iswalpha.lo obj/src/ctype/iswblank.lo obj/src/ctype/iswcntrl.lo obj/src/ctype/iswctype.lo obj/src/ctype/iswdigit.lo obj/src/ctype/iswgraph.lo obj/src/ctype/iswlower.lo obj/src/ctype/iswprint.lo obj/src/ctype/iswpunct.lo obj/src/ctype/iswspace.lo obj/src/ctype/iswupper.lo obj/src/ctype/iswxdigit.lo obj/src/ctype/isxdigit.lo obj/src/ctype/toascii.lo obj/src/ctype/tolower.lo obj/src/ctype/toupper.lo obj/src/ctype/towctrans.lo obj/src/ctype/wcswidth.lo obj/src/ctype/wctrans.lo obj/src/ctype/wcwidth.lo obj/src/dirent/alphasort.lo obj/src/dirent/closedir.lo obj/src/dirent/dirfd.lo obj/src/dirent/fdopendir.lo obj/src/dirent/opendir.lo obj/src/dirent/readdir.lo obj/src/dirent/readdir_r.lo obj/src/dirent/rewinddir.lo obj/src/dirent/scandir.lo obj/src/dirent/seekdir.lo obj/src/dirent/telldir.lo obj/src/dirent/versionsort.lo obj/src/env/__environ.lo obj/src/env/__init_tls.lo obj/src/env/__libc_start_main.lo obj/src/env/__reset_tls.lo obj/src/env/__stack_chk_fail.lo obj/src/env/clearenv.lo obj/src/env/getenv.lo obj/src/env/putenv.lo obj/src/env/secure_getenv.lo obj/src/env/setenv.lo obj/src/env/unsetenv.lo obj/src/errno/__errno_location.lo obj/src/errno/strerror.lo obj/src/exit/_Exit.lo obj/src/exit/abort.lo obj/src/exit/abort_lock.lo obj/src/exit/assert.lo obj/src/exit/at_quick_exit.lo obj/src/exit/atexit.lo obj/src/exit/exit.lo obj/src/exit/quick_exit.lo obj/src/fcntl/creat.lo obj/src/fcntl/fcntl.lo obj/src/fcntl/open.lo obj/src/fcntl/openat.lo obj/src/fcntl/posix_fadvise.lo obj/src/fcntl/posix_fallocate.lo obj/src/fenv/__flt_rounds.lo obj/src/fenv/fegetexceptflag.lo obj/src/fenv/feholdexcept.lo obj/src/fenv/fesetexceptflag.lo obj/src/fenv/fesetround.lo obj/src/fenv/feupdateenv.lo obj/src/fenv/x86_64/fenv.lo obj/src/internal/defsysinfo.lo obj/src/internal/floatscan.lo obj/src/internal/intscan.lo obj/src/internal/libc.lo obj/src/internal/procfdname.lo obj/src/internal/shgetc.lo obj/src/internal/syscall_ret.lo obj/src/internal/vdso.lo obj/src/internal/version.lo obj/src/ipc/ftok.lo obj/src/ipc/msgctl.lo obj/src/ipc/msgget.lo obj/src/ipc/msgrcv.lo obj/src/ipc/msgsnd.lo obj/src/ipc/semctl.lo obj/src/ipc/semget.lo obj/src/ipc/semop.lo obj/src/ipc/semtimedop.lo obj/src/ipc/shmat.lo obj/src/ipc/shmctl.lo obj/src/ipc/shmdt.lo obj/src/ipc/shmget.lo obj/src/ldso/__dlsym.lo obj/src/ldso/dl_iterate_phdr.lo obj/src/ldso/dladdr.lo obj/src/ldso/dlclose.lo obj/src/ldso/dlerror.lo obj/src/ldso/dlinfo.lo obj/src/ldso/dlopen.lo obj/src/ldso/x86_64/dlsym.lo obj/src/ldso/x86_64/tlsdesc.lo obj/src/legacy/cuserid.lo obj/src/legacy/daemon.lo obj/src/legacy/err.lo obj/src/legacy/euidaccess.lo obj/src/legacy/ftw.lo obj/src/legacy/futimes.lo obj/src/legacy/getdtablesize.lo obj/src/legacy/getloadavg.lo obj/src/legacy/getpagesize.lo obj/src/legacy/getpass.lo obj/src/legacy/getusershell.lo obj/src/legacy/isastream.lo obj/src/legacy/lutimes.lo obj/src/legacy/ulimit.lo obj/src/legacy/utmpx.lo obj/src/legacy/valloc.lo obj/src/linux/adjtime.lo obj/src/linux/adjtimex.lo obj/src/linux/arch_prctl.lo obj/src/linux/brk.lo obj/src/linux/cache.lo obj/src/linux/cap.lo obj/src/linux/chroot.lo obj/src/linux/clock_adjtime.lo obj/src/linux/clone.lo obj/src/linux/copy_file_range.lo obj/src/linux/epoll.lo obj/src/linux/eventfd.lo obj/src/linux/fallocate.lo obj/src/linux/fanotify.lo obj/src/linux/flock.lo obj/src/linux/getdents.lo obj/src/linux/getrandom.lo obj/src/linux/gettid.lo obj/src/linux/inotify.lo obj/src/linux/ioperm.lo obj/src/linux/iopl.lo obj/src/linux/klogctl.lo obj/src/linux/membarrier.lo obj/src/linux/memfd_create.lo obj/src/linux/mlock2.lo obj/src/linux/module.lo obj/src/linux/mount.lo obj/src/linux/name_to_handle_at.lo obj/src/linux/open_by_handle_at.lo obj/src/linux/personality.lo obj/src/linux/pivot_root.lo obj/src/linux/ppoll.lo obj/src/linux/prctl.lo obj/src/linux/prlimit.lo obj/src/linux/process_vm.lo obj/src/linux/ptrace.lo obj/src/linux/quotactl.lo obj/src/linux/readahead.lo obj/src/linux/reboot.lo obj/src/linux/remap_file_pages.lo obj/src/linux/sbrk.lo obj/src/linux/sendfile.lo obj/src/linux/setfsgid.lo obj/src/linux/setfsuid.lo obj/src/linux/setgroups.lo obj/src/linux/sethostname.lo obj/src/linux/setns.lo obj/src/linux/settimeofday.lo obj/src/linux/signalfd.lo obj/src/linux/splice.lo obj/src/linux/stime.lo obj/src/linux/swap.lo obj/src/linux/sync_file_range.lo obj/src/linux/syncfs.lo obj/src/linux/sysinfo.lo obj/src/linux/tee.lo obj/src/linux/timerfd.lo obj/src/linux/unshare.lo obj/src/linux/utimes.lo obj/src/linux/vhangup.lo obj/src/linux/vmsplice.lo obj/src/linux/wait3.lo obj/src/linux/wait4.lo obj/src/linux/xattr.lo obj/src/locale/__lctrans.lo obj/src/locale/__mo_lookup.lo obj/src/locale/bind_textdomain_codeset.lo obj/src/locale/c_locale.lo obj/src/locale/catclose.lo obj/src/locale/catgets.lo obj/src/locale/catopen.lo obj/src/locale/dcngettext.lo obj/src/locale/duplocale.lo obj/src/locale/freelocale.lo obj/src/locale/iconv.lo obj/src/locale/iconv_close.lo obj/src/locale/langinfo.lo obj/src/locale/locale_map.lo obj/src/locale/localeconv.lo obj/src/locale/newlocale.lo obj/src/locale/pleval.lo obj/src/locale/setlocale.lo obj/src/locale/strcoll.lo obj/src/locale/strfmon.lo obj/src/locale/strxfrm.lo obj/src/locale/textdomain.lo obj/src/locale/uselocale.lo obj/src/locale/wcscoll.lo obj/src/locale/wcsxfrm.lo obj/src/malloc/calloc.lo obj/src/malloc/free.lo obj/src/malloc/libc_calloc.lo obj/src/malloc/lite_malloc.lo obj/src/malloc/mallocng/aligned_alloc.lo obj/src/malloc/mallocng/donate.lo obj/src/malloc/mallocng/free.lo obj/src/malloc/mallocng/malloc.lo obj/src/malloc/mallocng/malloc_usable_size.lo obj/src/malloc/mallocng/realloc.lo obj/src/malloc/memalign.lo obj/src/malloc/posix_memalign.lo obj/src/malloc/realloc.lo obj/src/malloc/reallocarray.lo obj/src/malloc/replaced.lo obj/src/math/__cos.lo obj/src/math/__cosdf.lo obj/src/math/__cosl.lo obj/src/math/__expo2.lo obj/src/math/__expo2f.lo obj/src/math/__fpclassify.lo obj/src/math/__fpclassifyf.lo obj/src/math/__fpclassifyl.lo obj/src/math/__math_divzero.lo obj/src/math/__math_divzerof.lo obj/src/math/__math_invalid.lo obj/src/math/__math_invalidf.lo obj/src/math/__math_invalidl.lo obj/src/math/__math_oflow.lo obj/src/math/__math_oflowf.lo obj/src/math/__math_uflow.lo obj/src/math/__math_uflowf.lo obj/src/math/__math_xflow.lo obj/src/math/__math_xflowf.lo obj/src/math/__polevll.lo obj/src/math/__rem_pio2.lo obj/src/math/__rem_pio2_large.lo obj/src/math/__rem_pio2f.lo obj/src/math/__rem_pio2l.lo obj/src/math/__signbit.lo obj/src/math/__signbitf.lo obj/src/math/__signbitl.lo obj/src/math/__sin.lo obj/src/math/__sindf.lo obj/src/math/__sinl.lo obj/src/math/__tan.lo obj/src/math/__tandf.lo obj/src/math/__tanl.lo obj/src/math/acos.lo obj/src/math/acosf.lo obj/src/math/acosh.lo obj/src/math/acoshf.lo obj/src/math/acoshl.lo obj/src/math/asin.lo obj/src/math/asinf.lo obj/src/math/asinh.lo obj/src/math/asinhf.lo obj/src/math/asinhl.lo obj/src/math/atan.lo obj/src/math/atan2.lo obj/src/math/atan2f.lo obj/src/math/atanf.lo obj/src/math/atanh.lo obj/src/math/atanhf.lo obj/src/math/atanhl.lo obj/src/math/cbrt.lo obj/src/math/cbrtf.lo obj/src/math/cbrtl.lo obj/src/math/ceil.lo obj/src/math/ceilf.lo obj/src/math/copysign.lo obj/src/math/copysignf.lo obj/src/math/copysignl.lo obj/src/math/cos.lo obj/src/math/cosf.lo obj/src/math/cosh.lo obj/src/math/coshf.lo obj/src/math/coshl.lo obj/src/math/cosl.lo obj/src/math/erf.lo obj/src/math/erff.lo obj/src/math/erfl.lo obj/src/math/exp.lo obj/src/math/exp10.lo obj/src/math/exp10f.lo obj/src/math/exp10l.lo obj/src/math/exp2.lo obj/src/math/exp2f.lo obj/src/math/exp2f_data.lo obj/src/math/exp_data.lo obj/src/math/expf.lo obj/src/math/expm1.lo obj/src/math/expm1f.lo obj/src/math/fdim.lo obj/src/math/fdimf.lo obj/src/math/fdiml.lo obj/src/math/finite.lo obj/src/math/finitef.lo obj/src/math/floor.lo obj/src/math/floorf.lo obj/src/math/fmal.lo obj/src/math/fmax.lo obj/src/math/fmaxf.lo obj/src/math/fmaxl.lo obj/src/math/fmin.lo obj/src/math/fminf.lo obj/src/math/fminl.lo obj/src/math/fmod.lo obj/src/math/fmodf.lo obj/src/math/frexp.lo obj/src/math/frexpf.lo obj/src/math/frexpl.lo obj/src/math/hypot.lo obj/src/math/hypotf.lo obj/src/math/hypotl.lo obj/src/math/ilogb.lo obj/src/math/ilogbf.lo obj/src/math/ilogbl.lo obj/src/math/j0.lo obj/src/math/j0f.lo obj/src/math/j1.lo obj/src/math/j1f.lo obj/src/math/jn.lo obj/src/math/jnf.lo obj/src/math/ldexp.lo obj/src/math/ldexpf.lo obj/src/math/ldexpl.lo obj/src/math/lgamma.lo obj/src/math/lgamma_r.lo obj/src/math/lgammaf.lo obj/src/math/lgammaf_r.lo obj/src/math/lgammal.lo obj/src/math/llround.lo obj/src/math/llroundf.lo obj/src/math/llroundl.lo obj/src/math/log.lo obj/src/math/log10.lo obj/src/math/log10f.lo obj/src/math/log1p.lo obj/src/math/log1pf.lo obj/src/math/log2.lo obj/src/math/log2_data.lo obj/src/math/log2f.lo obj/src/math/log2f_data.lo obj/src/math/log_data.lo obj/src/math/logb.lo obj/src/math/logbf.lo obj/src/math/logbl.lo obj/src/math/logf.lo obj/src/math/logf_data.lo obj/src/math/lround.lo obj/src/math/lroundf.lo obj/src/math/lroundl.lo obj/src/math/modf.lo obj/src/math/modff.lo obj/src/math/modfl.lo obj/src/math/nan.lo obj/src/math/nanf.lo obj/src/math/nanl.lo obj/src/math/nearbyint.lo obj/src/math/nearbyintf.lo obj/src/math/nearbyintl.lo obj/src/math/nextafter.lo obj/src/math/nextafterf.lo obj/src/math/nextafterl.lo obj/src/math/nexttoward.lo obj/src/math/nexttowardf.lo obj/src/math/nexttowardl.lo obj/src/math/pow.lo obj/src/math/pow_data.lo obj/src/math/powf.lo obj/src/math/powf_data.lo obj/src/math/powl.lo obj/src/math/remainder.lo obj/src/math/remainderf.lo obj/src/math/remquo.lo obj/src/math/remquof.lo obj/src/math/rint.lo obj/src/math/rintf.lo obj/src/math/round.lo obj/src/math/roundf.lo obj/src/math/roundl.lo obj/src/math/scalb.lo obj/src/math/scalbf.lo obj/src/math/scalbln.lo obj/src/math/scalblnf.lo obj/src/math/scalblnl.lo obj/src/math/scalbn.lo obj/src/math/scalbnf.lo obj/src/math/scalbnl.lo obj/src/math/signgam.lo obj/src/math/significand.lo obj/src

这篇关于musl libc库的编译以及malloc mutex实现简析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/216311

相关文章

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

Python如何实现高效的文件/目录比较

《Python如何实现高效的文件/目录比较》在系统维护、数据同步或版本控制场景中,我们经常需要比较两个目录的差异,本文将分享一下如何用Python实现高效的文件/目录比较,并灵活处理排除规则,希望对大... 目录案例一:基础目录比较与排除实现案例二:高性能大文件比较案例三:跨平台路径处理案例四:可视化差异报

Java整合Protocol Buffers实现高效数据序列化实践

《Java整合ProtocolBuffers实现高效数据序列化实践》ProtocolBuffers是Google开发的一种语言中立、平台中立、可扩展的结构化数据序列化机制,类似于XML但更小、更快... 目录一、Protocol Buffers简介1.1 什么是Protocol Buffers1.2 Pro

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

Java实现本地缓存的四种方法实现与对比

《Java实现本地缓存的四种方法实现与对比》本地缓存的优点就是速度非常快,没有网络消耗,本地缓存比如caffine,guavacache这些都是比较常用的,下面我们来看看这四种缓存的具体实现吧... 目录1、HashMap2、Guava Cache3、Caffeine4、Encache本地缓存比如 caff

Java高效实现Word转PDF的完整指南

《Java高效实现Word转PDF的完整指南》这篇文章主要为大家详细介绍了如何用Spire.DocforJava库实现Word到PDF文档的快速转换,并解析其转换选项的灵活配置技巧,希望对大家有所帮助... 目录方法一:三步实现核心功能方法二:高级选项配置性能优化建议方法补充ASPose 实现方案Libre

Go中select多路复用的实现示例

《Go中select多路复用的实现示例》Go的select用于多通道通信,实现多路复用,支持随机选择、超时控制及非阻塞操作,建议合理使用以避免协程泄漏和死循环,感兴趣的可以了解一下... 目录一、什么是select基本语法:二、select 使用示例示例1:监听多个通道输入三、select的特性四、使用se

Java 中编码与解码的具体实现方法

《Java中编码与解码的具体实现方法》在Java中,字符编码与解码是处理数据的重要组成部分,正确的编码和解码可以确保字符数据在存储、传输、读取时不会出现乱码,本文将详细介绍Java中字符编码与解码的... 目录Java 中编码与解码的实现详解1. 什么是字符编码与解码?1.1 字符编码(Encoding)1