windows平台用NDK编译jrtplib

windows 7上使用android-ndk-r8e 编译jrtplib 3.9.1

分类: jrtplib开源项目 视频及流媒体开发 347人阅读 评论(0) 收藏 举报

在查了很多资料后,

发现windows 平台上用ndk编译jrtplib的资料真是不好找

github上的一个哥们做的很有参考价值:https://github.com/jimjh/JRTPLib-for-Android

但一直没在windows上搞定,实在没办法,开虚拟机在ubuntu上把github上的代码clone下来,

编译成功后又研究了一下,总归最后在Windows上搞定了


================================================分割线=====================================================


操作系统:windows 7

需要软件:

1 android-ndk-r8e

2 msys 2.4 (说明:这个是我安装railsinstaller-2.1.0.exe 自带的)

3 cmake 2.8.2


首先,还是jthread的编译,如果之前你用cmake和vs2010编译过这个jthread,

建议你重新换个目录把干净的源代码拷过来备用,不要混合这两个平台

在jthread目录下:

1 新建一个android.sh文件,

2 新建一个android-build目录以放置生成好的库及头文件

src/pthread/jthread.cpp的125行,找到pthread_cancel(threadid);并注释之,替换成 pthread_kill(threadid, SIGUSR1); 

原因么,是因为android用的自家产的Bionic libc而不是标准glibc,具体可wikipedia之。

4打开CMakeLists.txt,注释掉这一段:

  1. # find_package(Threads)  
  2. # if (NOT CMAKE_USE_WIN32_THREADS_INIT)  
  3. #   if (NOT CMAKE_USE_PTHREADS_INIT)  
  4. #       message(FATAL_ERROR "Can find neither pthread support nor Win32 thread support")  
  5. #   endif (NOT CMAKE_USE_PTHREADS_INIT)  
  6. # endif (NOT CMAKE_USE_WIN32_THREADS_INIT)  
# find_package(Threads)
# if (NOT CMAKE_USE_WIN32_THREADS_INIT)
# 	if (NOT CMAKE_USE_PTHREADS_INIT)
# 		message(FATAL_ERROR "Can find neither pthread support nor Win32 thread support")
# 	endif (NOT CMAKE_USE_PTHREADS_INIT)
# endif (NOT CMAKE_USE_WIN32_THREADS_INIT)


输入以下内容(主要是参考的上面那个github的内容,根据新版的ndk做了修改,怕出问题又直接写的绝对路径,请根据实际情况修改)

我对原作的修改最主要的就是对cmake加了一行参数:

  1. -G "MSYS Makefiles"  
-G "MSYS Makefiles"

  1. #!/bin/sh  
  2. # Written by Nxf <nick.xf@gmail.com>  
  3. #   
  4. # Builds the JThread library for Android  
  5. export NDK_ROOT="/D/Software/Develop/Android/android-ndk-r8e"  
  6. export PATH="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/:${PATH}"  
  7. SYS_ROOT="${NDK_ROOT}/platforms/android-8/arch-arm"  
  8. PREF="arm-linux-androideabi-"  
  9.   
  10. OUT_DIR="`pwd`/android-build"  
  11. C_FLAGS="-lstdc++ -lsupc++ \  
  12.         -I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.4.3/include \  
  13.         -I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.4.3/libs/armeabi/include \  
  14.         -L${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.4.3/libs/armeabi"  
  15.   
  16. #set -e  
  17.   
  18. export CC="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}gcc  --sysroot=${SYS_ROOT}"  
  19. export CXX="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}g++  --sysroot=${SYS_ROOT}"  
  20. export LD="$${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/{PREF}ld  --sysroot=${SYS_ROOT}"  
  21. export CPP="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}cpp  --sysroot=${SYS_ROOT}"  
  22. export AS="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}as"  
  23. export OBJCOPY="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}objcopy"  
  24. export OBJDUMP="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}objdump"  
  25. export STRIP="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}strip"  
  26. export RANLIB="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}ranlib"  
  27. export CCLD="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}gcc  --sysroot=${SYS_ROOT}"  
  28. export AR="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}ar"  
  29.   
  30. cmake   \  
  31.         -DCMAKE_SYSTEM_NAME="Generic" \  
  32.         -DCMAKE_CXX_FLAGS="${C_FLAGS}"\  
  33.         -DCMAKE_FIND_ROOT_PATH="${SYS_ROOT}" \  
  34.         -DCMAKE_INSTALL_PREFIX="${OUT_DIR}" \  
  35.         -G "MSYS Makefiles" .  
  36.           
  37.           
  38.   
  39. /D/Software/Develop/Android/android-ndk-r8e/prebuilt/windows/bin/make.exe  
  40. /D/Software/Develop/Android/android-ndk-r8e/prebuilt/windows/bin/make.exe install  
  41.   
  42. cd ${OUT_DIR}/lib && \  
  43. ${AR} -x libjthread.a && \  
  44. ${CXX} ${C_FLAGS} -shared -Wl,-soname,libjthread.so -o libjthread.so  *.obj && \  
  45. rm *.obj  
  46.   
  47. exit 0  
#!/bin/sh
# Written by Nxf <nick.xf@gmail.com>
# 
# Builds the JThread library for Android
export NDK_ROOT="/D/Software/Develop/Android/android-ndk-r8e"
export PATH="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/:${PATH}"
SYS_ROOT="${NDK_ROOT}/platforms/android-8/arch-arm"
PREF="arm-linux-androideabi-"

OUT_DIR="`pwd`/android-build"
C_FLAGS="-lstdc++ -lsupc++ \
        -I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.4.3/include \
        -I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.4.3/libs/armeabi/include \
        -L${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.4.3/libs/armeabi"

#set -e

export CC="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}gcc  --sysroot=${SYS_ROOT}"
export CXX="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}g++  --sysroot=${SYS_ROOT}"
export LD="$${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/{PREF}ld  --sysroot=${SYS_ROOT}"
export CPP="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}cpp  --sysroot=${SYS_ROOT}"
export AS="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}as"
export OBJCOPY="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}objcopy"
export OBJDUMP="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}objdump"
export STRIP="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}strip"
export RANLIB="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}ranlib"
export CCLD="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}gcc  --sysroot=${SYS_ROOT}"
export AR="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}ar"

cmake	\
		-DCMAKE_SYSTEM_NAME="Generic" \
        -DCMAKE_CXX_FLAGS="${C_FLAGS}"\
		-DCMAKE_FIND_ROOT_PATH="${SYS_ROOT}" \
		-DCMAKE_INSTALL_PREFIX="${OUT_DIR}" \
		-G "MSYS Makefiles" .
		
		

/D/Software/Develop/Android/android-ndk-r8e/prebuilt/windows/bin/make.exe
/D/Software/Develop/Android/android-ndk-r8e/prebuilt/windows/bin/make.exe install

cd ${OUT_DIR}/lib && \
${AR} -x libjthread.a && \
${CXX} ${C_FLAGS} -shared -Wl,-soname,libjthread.so -o libjthread.so  *.obj && \
rm *.obj

exit 0


在msys命令行下运行这个android.sh就能生成jthread类库了


同理,到jrtplib文件夹下:

1 新建android.sh

2 新建android_build文件夹

3 打开CMakeLists.txt,找到第125行并注释掉: add_subdirectory(examples) 

原因是我编译的时候发现样例编译有问题,干脆就不用了,反正库文件用不到这个


编辑android.sh内容如下:

(需要注意的是jthread库的目录位置,要根据实际情况调整)

  1. #!/bin/sh  
  2. #   
  3. # Builds the JThread library for Android  
  4. export NDK_ROOT="/D/Software/Develop/Android/android-ndk-r8e"  
  5. export PATH="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/:${PATH}"  
  6. SYS_ROOT="${NDK_ROOT}/platforms/android-8/arch-arm"  
  7. PREF="arm-linux-androideabi-"  
  8.   
  9. OUT_DIR="`pwd`/android-build"  
  10.   
  11. # C_FLAGS="-lstdc++ -lsupc++ \  
  12. #         -I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.4.3/include \  
  13. #         -I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.4.3/libs/armeabi/include \  
  14. #         -L${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.4.3/libs/armeabi"  
  15.   
  16. C_FLAGS="       -lc \  
  17.                         -lgcc \  
  18.                         -lstdc++ -lsupc++ \  
  19.                         -I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.4.3/include \  
  20.                         -I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.4.3/libs/armeabi/include \  
  21.                         -L../jthread-1.3.1/android-build/lib \  
  22.                         -L${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.4.3/libs/armeabi"  
  23.   
  24.   
  25. #set -e  
  26.   
  27. export CC="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}gcc  --sysroot=${SYS_ROOT}"  
  28. export CXX="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}g++  --sysroot=${SYS_ROOT}"  
  29. export LD="$${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/{PREF}ld  --sysroot=${SYS_ROOT}"  
  30. export CPP="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}cpp  --sysroot=${SYS_ROOT}"  
  31. export AS="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}as"  
  32. export OBJCOPY="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}objcopy"  
  33. export OBJDUMP="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}objdump"  
  34. export STRIP="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}strip"  
  35. export RANLIB="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}ranlib"  
  36. export CCLD="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}gcc  --sysroot=${SYS_ROOT}"  
  37. export AR="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}ar"  
  38.   
  39. cmake   \  
  40.         -DCMAKE_SYSTEM_NAME="Generic" \  
  41.         -DCMAKE_CXX_FLAGS="${C_FLAGS}"\  
  42.         -DCMAKE_FIND_ROOT_PATH="${SYS_ROOT}" \  
  43.         -DJTHREAD_INCLUDE_DIRS="../JThread-Android/android-build/include" \  
  44.         -DJTHREAD_LIBRARIES="../JThread-Android/android-build/lib" \  
  45.         -DCMAKE_PREFIX_PATH="../JThread-Android/android-build" \  
  46.         -DCMAKE_INSTALL_PREFIX="${OUT_DIR}" \  
  47.         -G "MSYS Makefiles" .  
  48.           
  49.           
  50.   
  51. /D/Software/Develop/Android/android-ndk-r8e/prebuilt/windows/bin/make.exe  
  52. /D/Software/Develop/Android/android-ndk-r8e/prebuilt/windows/bin/make.exe install  
  53.   
  54. cd ${OUT_DIR}/lib && \  
  55. # ${AR} -x libjthread.a && \  
  56. # ${CXX} ${C_FLAGS} -shared -Wl,-soname,libjthread.so -o libjthread.so  *.obj && \  
  57. ${AR} -x libjrtplib.a && \  
  58. ${CXX} ${C_FLAGS} -shared -Wl,-soname,libjrtplib.so -o libjrtplib.so  *.obj && \  
  59. rm *.obj  
  60.   
  61. exit 0  
#!/bin/sh
# 
# Builds the JThread library for Android
export NDK_ROOT="/D/Software/Develop/Android/android-ndk-r8e"
export PATH="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/:${PATH}"
SYS_ROOT="${NDK_ROOT}/platforms/android-8/arch-arm"
PREF="arm-linux-androideabi-"

OUT_DIR="`pwd`/android-build"

# C_FLAGS="-lstdc++ -lsupc++ \
#         -I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.4.3/include \
#         -I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.4.3/libs/armeabi/include \
#         -L${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.4.3/libs/armeabi"

C_FLAGS="       -lc \
                        -lgcc \
                        -lstdc++ -lsupc++ \
                        -I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.4.3/include \
                        -I${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.4.3/libs/armeabi/include \
                        -L../jthread-1.3.1/android-build/lib \
                        -L${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/4.4.3/libs/armeabi"


#set -e

export CC="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}gcc  --sysroot=${SYS_ROOT}"
export CXX="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}g++  --sysroot=${SYS_ROOT}"
export LD="$${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/{PREF}ld  --sysroot=${SYS_ROOT}"
export CPP="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}cpp  --sysroot=${SYS_ROOT}"
export AS="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}as"
export OBJCOPY="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}objcopy"
export OBJDUMP="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}objdump"
export STRIP="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}strip"
export RANLIB="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}ranlib"
export CCLD="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}gcc  --sysroot=${SYS_ROOT}"
export AR="${NDK_ROOT}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/${PREF}ar"

cmake	\
		-DCMAKE_SYSTEM_NAME="Generic" \
        -DCMAKE_CXX_FLAGS="${C_FLAGS}"\
		-DCMAKE_FIND_ROOT_PATH="${SYS_ROOT}" \
		-DJTHREAD_INCLUDE_DIRS="../JThread-Android/android-build/include" \
        -DJTHREAD_LIBRARIES="../JThread-Android/android-build/lib" \
        -DCMAKE_PREFIX_PATH="../JThread-Android/android-build" \
		-DCMAKE_INSTALL_PREFIX="${OUT_DIR}" \
		-G "MSYS Makefiles" .
		
		

/D/Software/Develop/Android/android-ndk-r8e/prebuilt/windows/bin/make.exe
/D/Software/Develop/Android/android-ndk-r8e/prebuilt/windows/bin/make.exe install

cd ${OUT_DIR}/lib && \
# ${AR} -x libjthread.a && \
# ${CXX} ${C_FLAGS} -shared -Wl,-soname,libjthread.so -o libjthread.so  *.obj && \
${AR} -x libjrtplib.a && \
${CXX} ${C_FLAGS} -shared -Wl,-soname,libjrtplib.so -o libjrtplib.so  *.obj && \
rm *.obj

exit 0


运行android.sh即可生成库文件。


最后生成的动态和静态链接库文件就可以用到android项目里面做开发了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值