首页
统计
壁纸
留言板
友情链接
更多
直播
实用工具
Search
1
给孙小姐的一封情书
428 阅读
2
LabVIEW | 各版本及开发工具模块下载
216 阅读
3
armUbuntu系统构建
206 阅读
4
OpenWRT | 作为 旁路由/单臂路由/透明网关 设置 DDNS
187 阅读
5
armUbuntu | 开发板 移植 openssl 库
186 阅读
取次花丛懒回顾
默认分类
C#
MySQL
LabVIEW
Java
Android
PHP
Python
handsome
相册
百度地图
嵌入式
嵌入式Ubuntu
I.MX6ULL
linux
Unity
Golang
Rust
OpenHD
教学计划
Search
标签搜索
C#
handsome
Git
动态壁纸
开源
Unity3d
Unity
csharp
Moao
累计撰写
171
篇文章
累计收到
23
条评论
首页
栏目
取次花丛懒回顾
默认分类
C#
MySQL
LabVIEW
Java
Android
PHP
Python
handsome
相册
百度地图
嵌入式
嵌入式Ubuntu
I.MX6ULL
linux
Unity
Golang
Rust
OpenHD
教学计划
页面
统计
壁纸
留言板
友情链接
直播
实用工具
搜索到
171
篇与
的结果
2025-06-27
Golang | cgo(gcc) windows mingw64 环境搭建
以下是将该网页内容整理成的 Markdown 格式:golang cgo windows mingw64 环境搭建准备网络一定要ok提前安装好 cmder 或者 cygwin,涉及大量命令操作,而windows本身命令行非常难用,不适合开发直达下载链接:https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/8.1.0/threads-posix/seh/x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z/download安装 Mingw-w64MinGW全称Minimalist GNU For Windows,是个精简的Windows平台C/C++、ADA及Fortran编译器。相比Cygwin而言,体积要小很多,使用较为方便。MinGW提供了一套完整的开源编译工具集,以适合Windows平台应用开发,且不依赖任何第三方C运行时库。MinGW包括:一套集成编译器,包括C、C++、ADA语言和Fortran语言编译器用于生成Windows二进制文件的GNU工具的(编译器、链接器和档案管理器)用于Windows平台安装和部署MinGW和MSYS的命令行安装器(mingw-get)用于命令行安装器的GUI打包器(mingw-get-inst)MingW 分 32位和64位版本:下载地址分别如下:MinGW 32位MinGW-w64 64位gcc 主要有三种不同的线程库的定义,分别是 Win32,OS/2,以及 POSIX。前两种定义只适合于他们各自的平台,而 POSIX 定义的线程库是适用于所有的计算平台的,故肯定使用 threads-posix。C++ Exceptions有三种处理方式:DWARF 不传递错误,需要使用DWARF-2(或DWARF-3)调试信息,生成的包会很大SJLJ 长跳转,即使抛出异常也正常的执行,可以在没有使用GCC编译的代码或者没有调用堆栈展开信息的代码中工作SEH 结构化异常处理,Windows使用自己的异常处理机制下载 MinGW下载 Mingw-w64 Mingw-w64 sourceforge。这里选择的是 Mingw-w64 win64 Personal Buildsfiles -> Toolchains targetting Win64 -> Personal Builds -> mingw-builds -> 8.1.0 -> threads-posix -> seh -> x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z直达下载链接:https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/8.1.0/threads-posix/seh/x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z/download安装 MinGW直接下载解压即可,添加环境变量 MINGW64_HOME 指向解压的路径,环境变量 path 中添加将 %MINGW64_HOME%\bin 。然后命令行输入 gcc -v 打印:Microsoft Windows [版本 10.0.26100.4484] (c) Microsoft Corporation。保留所有权利。 C:\Users\wangyu>gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=C:/Dev/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe Target: x86_64-w64-mingw32 Configured with: ../../../src/gcc-8.1.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64 --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-posix-seh-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/lib -L/c/mingw810/prerequisites/x86_64-zlib-static/lib -L/c/mingw810/prerequisites/x86_64-w64-mingw32-static/lib ' Thread model: posix gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project) C:\Users\wangyu>配置全局 make进入 mingw64 的安装目录找到 bin 进入,新建文件 make.bat 内容为:@echo off C:\Dev\mingw64\bin\mingw32-make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9注意目录按安装目录来保存后测试配置:Microsoft Windows [版本 10.0.26100.4484] (c) Microsoft Corporation。保留所有权利。 C:\Users\wangyu>make -v GNU Make 4.2.1 Built for x86_64-w64-mingw32 Copyright (C) 1988-2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. C:\Users\wangyu>golang 在win下交叉 cgo 编译注意cygwin 本身也能安装 GNU 的 make 或者 gcc 工具链,但是非常容易出现不能编译的问题,故建议使用 mingw64 的 gcc。cygwin 本身只作为一个备用编译方案,如果 mingw64 出现问题,可以切换到 cygwin 来执行。
2025年06月27日
2 阅读
0 评论
0 点赞
2025-06-27
Android Studio | 设置国内代理(SDK 设置国内代理(阿里云镜像))
Android Studio 相关下载设置国内代理(阿里云镜像)(Android Git 仓库 国内代理/阿里云镜像)简介Android 上的 Git 存储库。下载地址阿里云镜像:https://mirrors.aliyun.com/android.googlesource.com/相关链接官方主页使用方法打开设置(settings)。进入“外观与行为”(Appearance & Behavior)。选择“系统设置”(System Settings)。点击“HTTP 代理”(Http Proxy)。选择“自动检测代理设置”(Auto-detected proxy settings)。勾选“自动代理配置 URL”(Automatic proxy configuration URL)。将上述下载地址(阿里云镜像:https://mirrors.aliyun.com/android.googlesource.com/)填入。
2025年06月27日
2 阅读
0 评论
0 点赞
2025-06-27
浏览器 | 开启Chrome和Edge的多线程下载功能(Parallel downloading)
在日常使用浏览器下载文件时,常常会遇到下载速度缓慢的问题。为了提升下载速度,除了使用第三方下载工具(如IDM)外,还可以通过开启浏览器的多线程下载功能来实现。以下是针对Chrome和Edge浏览器的详细操作步骤:Chrome浏览器在地址栏输入以下内容并回车:chrome://flags/#enable-parallel-downloading页面会显示“Parallel downloading”选项,默认设置为“Default”(关闭状态)。将该选项更改为“Enabled”。点击“Relaunch”按钮重启浏览器,多线程下载功能即可生效。Edge浏览器(Chromium内核)在地址栏输入以下内容并回车:edge://flags/#enable-parallel-downloading页面同样会显示“Parallel downloading”选项,默认设置为“Default”。将该选项更改为“Enabled”。点击“Relaunch”按钮重启浏览器,多线程下载功能即可启用。注意事项开启多线程下载功能后,下载速度可能会因网络环境、服务器性能等因素有所不同。该功能可能会对服务器造成一定压力,因此在使用时应遵循相关法律法规和网站规定。如果在操作过程中遇到问题,可以尝试清除浏览器缓存或更新浏览器版本后再进行设置。通过以上步骤,你就可以轻松开启Chrome和Edge浏览器的多线程下载功能,享受更快的下载速度。
2025年06月27日
3 阅读
0 评论
0 点赞
2025-06-23
Android | Android 开发环境信息记录(自用各个版本信息/个版本对应信息)
安卓自用开发环境信息名称版本信息Android Studio2024.2.2 Patch 2 February 26, 2025JDKjdk-17.0.15Gradlegradle-8.2各环境下载链接和安装教程:JDK官方下载连接Java SE Development Kit 17.0.15 downloads安装教程https://blog.1okk.com/archives/196.htmlGradle官方下载连接https://gradle.org/releases/gradle-8.2-all.zipgradle-8.2-bin.zip安装教程https://blog.1okk.com/archives/370.htmlAndroid Studio Ladybug Feature Drop | 2024.2.2 Patch 2 February 26, 2025官方下载连接InstallersChromeOS: android-studio-2024.2.2.15-cros.deb (1.0 GB)Mac (Apple Silicon): android-studio-2024.2.2.15-mac_arm.dmg (1.3 GB)Mac (Intel): android-studio-2024.2.2.15-mac.dmg (1.3 GB)Windows (64-bit): android-studio-2024.2.2.15-windows.exe (1.2 GB)SHA-256 checksumsd87c3d88318101005f47598de347da41b3d2b28966f3260ba77d20fb6f78fcb4 android-studio-2024.2.2.15-cros.debf859a4e6d6e2b7f3501026f15e2e81531832e70a72b461e8bc5349ae91c7e730 android-studio-2024.2.2.15-mac_arm.dmg762c2ef01578323b58f2a0b25ce508b6ebb818395be0fcb81388d8320efd0a29 android-studio-2024.2.2.15-mac.dmg3d9607d65b809ee8b22e977adede4806fd3494871cf3fd17b68399b0050955d0 android-studio-2024.2.2.15-windows.exeZip filesLinux: android-studio-2024.2.2.15-linux.tar.gz (1.3 GB)Windows (64-bit): android-studio-2024.2.2.15-windows.zip (1.2 GB)SHA-256 checksums595fe446f11d74cdd9a4f4dae6224ab9828789a31873b8786d76d6ab29094e17 android-studio-2024.2.2.15-linux.tar.gz81eb908e1548732234a5959901cb83c649f72131f8e1a186f10b6e1b9a5d789e android-studio-2024.2.2.15-windows.zipAndroid Studio 版本:https://redirector.gvt1.com/edgedl/android/studio/ide-zips/2024.2.2.11/android-studio-2021.3.1.11-windows.zip
2025年06月23日
4 阅读
0 评论
0 点赞
2025-06-10
Android | 安卓动态申请权限,以蓝牙权限请求为例(使用 Android 的 `registerForActivityResult` API 简化权限请求)
使用 Android 的 registerForActivityResult API 简化权限请求在 Android 开发中,请求权限是一个常见的操作。从 Android 13 开始,Google 推出了新的 registerForActivityResult API,它让权限请求变得更简单。本文将展示如何用这个新 API 替换旧的 onRequestPermissionsResult 方法,并提供一个简单易懂的示例。为什么要替换?旧的 onRequestPermissionsResult 方法需要全局回调,用 requestCode 区分不同的权限请求,这使得代码复杂且难以维护。新的 registerForActivityResult API 让每个权限请求都有自己的回调,代码更清晰、更简洁。示例代码1. 权限请求工具类我们先定义一个工具类 PermissionRequestHelper,封装权限请求的逻辑。package net.moao.bluetoothuploader.utils; import android.app.Activity; import android.os.Build; import androidx.annotation.RequiresApi; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import java.util.HashMap; import java.util.Map; public class PermissionRequestHelper { private static final Map<String, String> PERMISSION_NAME_MAP = new HashMap<String, String>() {{ put("android.permission.ACCESS_FINE_LOCATION", "位置"); put("android.permission.BLUETOOTH_SCAN", "蓝牙扫描"); put("android.permission.BLUETOOTH_ADVERTISE", "蓝牙广告"); put("android.permission.BLUETOOTH_CONNECT", "蓝牙连接"); }}; /** * 获取权限的显示名称 * * @param permission 权限的英文名称 * @return 权限的显示名称 */ public static String getPermissionDisplayName(String permission) { return PERMISSION_NAME_MAP.getOrDefault(permission, permission); } /** * 请求权限 * * @param activity 当前的 Activity * @param permissions 请求的权限列表 * @param callback 权限请求结果的回调 */ @RequiresApi(api = Build.VERSION_CODES.TIRAMISU) public static void requestPermissions(Activity activity, String[] permissions, PermissionRequestCallback callback) { // 注册权限请求 ActivityResultLauncher<String[]> launcher = activity.registerForActivityResult( new ActivityResultContracts.RequestMultiplePermissions(), result -> { // 构建权限请求结果的字符串 StringBuilder resultBuilder = new StringBuilder(); for (String permission : permissions) { String permissionName = getPermissionDisplayName(permission); boolean isGranted = result.getOrDefault(permission, false); String status = isGranted ? "已开启" : "未开启"; resultBuilder.append(permissionName).append(": ").append(status).append("\n"); } // 调用回调方法 callback.onPermissionsResult(resultBuilder.toString()); } ); // 发起权限请求 launcher.launch(permissions); } /** * 权限请求结果的回调接口 */ public interface PermissionRequestCallback { /** * 权限请求结果的回调方法 * * @param result 权限请求的结果 */ void onPermissionsResult(String result); } }2. 在 Activity 中使用工具类接下来,我们展示如何在 Activity 中使用 PermissionRequestHelper 类来请求权限。package net.moao.bluetoothuploader; import android.os.Bundle; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import net.moao.bluetoothuploader.utils.PermissionRequestHelper; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 定义需要请求的权限 String[] requiredPermissions = { "android.permission.POST_NOTIFICATIONS", "android.permission.ACCESS_FINE_LOCATION", "android.permission.BLUETOOTH_SCAN", "android.permission.BLUETOOTH_CONNECT", "android.permission.BLUETOOTH_ADVERTISE" }; // 请求权限 PermissionRequestHelper.requestPermissions(this, requiredPermissions, new PermissionRequestHelper.PermissionRequestCallback() { @Override public void onPermissionsResult(String result) { // 处理权限请求的结果 Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show(); } }); } }代码解释1. 权限名称映射private static final Map<String, String> PERMISSION_NAME_MAP = new HashMap<String, String>() {{ put("android.permission.ACCESS_FINE_LOCATION", "位置"); put("android.permission.BLUETOOTH_SCAN", "蓝牙扫描"); put("android.permission.BLUETOOTH_ADVERTISE", "蓝牙广告"); put("android.permission.BLUETOOTH_CONNECT", "蓝牙连接"); }};PERMISSION_NAME_MAP:一个静态的 HashMap,把权限的英文名称映射为中文名称。这样在用户界面中展示权限名称时更友好。2. 获取权限的显示名称public static String getPermissionDisplayName(String permission) { return PERMISSION_NAME_MAP.getOrDefault(permission, permission); }getPermissionDisplayName:根据权限的英文名称获取对应的中文名称。如果权限名称不在映射表中,就返回原始的英文名称。3. 请求权限public static void requestPermissions(Activity activity, String[] permissions, PermissionRequestCallback callback) { // 注册权限请求 ActivityResultLauncher<String[]> launcher = activity.registerForActivityResult( new ActivityResultContracts.RequestMultiplePermissions(), result -> { // 构建权限请求结果的字符串 StringBuilder resultBuilder = new StringBuilder(); for (String permission : permissions) { String permissionName = getPermissionDisplayName(permission); boolean isGranted = result.getOrDefault(permission, false); String status = isGranted ? "已开启" : "未开启"; resultBuilder.append(permissionName).append(": ").append(status).append("\n"); } // 调用回调方法 callback.onPermissionsResult(resultBuilder.toString()); } ); // 发起权限请求 launcher.launch(permissions); }requestPermissions:这个方法用于请求权限。activity:当前的 Activity 实例。permissions:需要请求的权限列表。callback:权限请求结果的回调接口。ActivityResultLauncher:使用 registerForActivityResult 方法注册权限请求。ActivityResultContracts.RequestMultiplePermissions:指定请求多个权限。result:权限请求的结果,是一个 Map<String, Boolean>,键是权限名称,值是布尔值,表示权限是否被授予。resultBuilder:构建权限请求结果的字符串,用于在回调中展示。callback.onPermissionsResult:调用回调方法,把权限请求的结果传递给调用者。4. 权限请求结果的回调接口public interface PermissionRequestCallback { void onPermissionsResult(String result); }PermissionRequestCallback:一个回调接口,用于处理权限请求的结果。onPermissionsResult:权限请求结果的回调方法,参数 result 是权限请求结果的字符串。使用新 API 的好处代码更简洁:使用 registerForActivityResult API,代码更简洁,易于维护。避免全局回调:不再需要使用全局的 onRequestPermissionsResult 方法,避免了通过 requestCode 区分不同权限请求的复杂性。更直观:每个权限请求都有自己的回调,逻辑更清晰。
2025年06月10日
3 阅读
0 评论
0 点赞
1
2
...
35