自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(473)
  • 资源 (3)
  • 论坛 (12)
  • 收藏
  • 关注

原创 jnaerator:JNA框架下向动态库传递Java Object(即动态库JNI方式访问java对象)

熟悉JNA的童鞋都知道,通过JNA可以向动态库传递(或从动态库返回)com.sun.jna.Structure为基类的对象,在动态库一层,会把Structure解析为结构C语言的struct或union,jnaerator可以将C语言定义的struct或union自动生成继承Structure的 java类。但有的时候,我们希望java层与动态库直接传递Java对象,动态库以JNI方式访问java层传递的Java对象,或直接返回java对象给java层,JNA可以实现么?最近我就遇到了这个问题,研究了J

2021-05-07 17:42:34 9

原创 maven:创建阿里云私有maven仓库塈maven 命令行发布Release版本

最近在网上查找才发现阿里云提供了免费私有 maven 仓库,这可解决我的大问题了。我们的大部分项目都是开源提供给用户的,这些项目我们都是发布到maven中央仓库,但也有部分内部使用的jar包,我们不希望发布到maven中央仓库,但也需要有发布版本管理,自己搭安装Nexus搭建Maven私有仓库总是有些麻烦,维护工作也不少。现在有阿里云提供的免费私有 maven 仓库正好能解决我们的问题。打开下面的页面,使用支付宝或钉钉APP扫码认证就登录进来了,https://packages.aliyun.com/

2021-04-22 11:10:21 69

原创 macOS(Big Sur):eclipse下引用JDK 8 tools.jar 塈在macOS下为eclipse设置JAVA_HOME环境变量问题

以下为我的项目中关于引用JDK下tools.jar的pom.xml片段,在windows,Linux下都工作正常,最近换到MacOS 11(Big Sur)下工作,命令行执行编译没有问题,但在eclipse(最新版本eclipse-java-2021-03-R-macosx-cocoa-x86_64.dmg)发现它不正常了。 <profiles> <profile> <id>default-javadoc-profile</id> <a

2021-04-16 17:19:05 56

原创 macOS:编译boost静态库 error:implicit declaration of function ‘out_printf‘ is invalid in C99

macOS下如果你使用brew安装boost,很方便,但默认安装出来的boost 1.75是动态库,如果想要静态库版本还是要自己编译。于是我到boost官网下载了boost 1.62在执行./bootstrap.sh失败了。查看./bootstrap.log,如下:###### Using 'darwin' toolset.###rm -rf bootstrapmkdir bootstrapcc -o bootstrap/jam0 command.c compile.c constants

2021-04-15 17:04:32 91

原创 macOS:卸载JRE或JDK

本来打算在我的macbook pro上安装JDK,一不小心安装了jre。linux下卸载JRE很简单删除对应的文件夹就好了,可是macOS上dmg安装的软件怎么卸载对我这个macOS新手来说还真不知道。好在oracle官网上有说明:《Uninstalling the JRE on macOS》卸载JRE## 'Internet Plug-Ins'文件夹名字里有空格,所以这里路径要用双引号sudo rm -fr "/Library/Internet Plug-Ins/JavaAppletPlug

2021-04-12 10:04:09 48

原创 macOS(Big Sur)命令行终端显示git分支

关于在命令行显示git分支,我找到了网上很多文章,都类似,比如下面这篇:[《mac终端使用git命令行显示分支信息》](https://blog.csdn.net/Enjun97/article/details/103477581)就是修改`.bashrc`脚本添加如下代码就可以了,我之前在linux平台基本就是这么干的.但是macOS升级到Big Sur后默认的脚本解释器从`bash`改为了`zsh`,上面的办法就不灵了。

2021-04-11 21:50:05 55

原创 c++:error:locale::facet::_S_create_c_locale name not valid

最近在做一个linux-arm平台的项目时,遇到如如下错误error:locale::facet::_S_create_c_locale name not valid按照网上的找到所有答案都是要为主机添加语言支持,可是对于我们来说,程序是在客户的设备上跑的,要求用户添加特定的设置并不现实。通过反复查找,定位到下面的代码,是一个将字符串转大写的模板函数:template<typename E, typename TR = std::char_traits<E>, type

2021-03-24 12:51:49 83

原创 c++11:计算时间差(毫秒)

C++11下计算时间差(毫秒)要用到chrono时间库,以下是示例代码,我从en.cppreference.com上抄来改的.#include <iostream>#include <iomanip>#include <vector>#include <numeric>#include <chrono> volatile int sink;int main(){ std::cout << std::fixed

2021-03-18 13:18:24 163 1

原创 maven:shade 生成快照版本(SNAPSHOT)的fat-jar,同时生成对应的source.jar

有的时候,我们需要将项目所有依赖库打成一个fat-jar,提供给客户,同时提供对应的source.jar。这个功能很好实现在pom.xml中增加maven-shade-plugin插件执行就可以,如下: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.1.

2021-02-06 13:12:13 123

原创 Windows NDK 编译openssl

关于NDK 编译openssl,网上找了不少文章,比如:《在windows上编译openssl供Android NDK使用》大都是基于这个github上的项目编译NDK openssl:https://github.com/guardianproject/openssl-android我也照着上面的文章顺利编译出了目标代码,但是因为编译出来的代码不是标准的安装目标结构,由于我需要用CMAKE交叉编译,所以这个项目编译出来的目标代码对于我并不方便使用。所以我自己下载了openssl的源码,并根据源码写

2021-01-31 21:34:16 160

原创 MSVC/GCC/NDK:将二进制文件生成obj文件

如何将二进制文件作为数据添加到自己程序中?这是我最近遇到的问题,google上找到这两篇说得已经很清楚:《Embedding of binary data into programs》《Embedding Blobs in Binaries》一种方法是将想二进制文件生成c代码,与项目一起编译,这方法小的数据没问题,但如果二进制文件太大,生成的c代码更是巨大,增加编译器负担,好处就是完全没有跨平台问题。网上可以找到相关的工具(搜索 bin2c 或 bin2h)第二种方式就是用GNU的objcopy

2021-01-19 18:44:28 164

原创 c++ thrift 库调试信息输出

thrift是一个跨平台的RPC框架,用了很久,但一直不知道如何输出它的内部日志,很长时间了,因为用不上,拿倒也相安无事。今天遇到thrift 底层socket通讯的问题,一直找不到原因,就把TSocket.cpp代码撸了一遍,才搞明白thrift库输出日志的方式。thrift有一个类型为apache::thrift::TOutput的全局变量GlobalOutput(定义在thrift/TOutput.h),通过调用其 setOutputFunction函数设置一个实现输出日志的回调函数,就可以让Th

2021-01-14 13:26:45 138

原创 C++11:string和wstring之间互转换

今天打算做string到wstring转换时发现以前早已经写过,已经忘记从哪里找来的了,贴出代码,以防再忘记。C++11后UTF8编码转换还真是方便#include <string>#include <locale>#include <codecvt> // convert string to wstring inline std::wstring to_wide_string(const std::string& input) { std::w

2020-12-12 11:06:43 289 2

原创 通过升级cmake版本解决NDK编译报错:no member named ‘signbit‘ in the global namespace;

今天在ubuntu16下使用NDK(r19)编译thrift c++库时报了很多类似如下的错误:/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1/cmath:314:9: error:no member named ‘signbit’ in the global namespace; did you mean‘__signbit’?using ::signbit;~~^/usr/

2020-12-04 12:50:44 544 1

原创 windows下Android NDK R19 交叉编译 thrift C++ 库(cmake)

在NDK下编译thrift C++库,先要要编译android版的boost,这个不是本文讨论的内容,关于编译android 版本的boost,参见这个开源项目 Boost-for-Android,很好用。我用Boost-for-Androidk顺利编译了boost 1.69.(Android NDK r19)有了android版的boost就可以编译thrift C++库了。在这里走了不少弯路。先说明一下我的编译环境:操作系统:Windows 7cmake 3.11.1,编译thrift需要cm

2020-12-03 18:07:46 240

原创 java:正则表达式匹配IMEI(15或17位)

国际移动设备识别码(International Mobile Equipment Identity,IMEI),即通常所说的手机序列号、手机“串号”,用于在移动电话网络中识别每一部独立的手机等移动通信设备,相当于移动电话的身份证。序列号共有15~17位数字,前8位(TAC)是型号核准号码(早期为6位),是区分手机品牌和型号的编码。接着2位(FAC)是最后装配号(仅在早期机型中存在),代表最终装配地代码。后6位(SNR)是串号,代表生产顺序号。–百度百科由上面的IMEI的说明可知IMEI是15或17位.

2020-11-20 16:08:16 377

原创 eRPC:通过实现双向请求的串行通讯传输(dual serial transport)支持client/server混合运行

Dual serial transport概述eRPC 的默认的设计模型是简单的主从模式,也就是设备A上运行服务,另一个设备B主动发起请求调用A的服务,但在实际的应用中,我们需要双向的请求,也就是说设备A,设备B互为主从,两台设备上都会运行服务供对方调用。在这种模式下,原有的串行通讯传输(SerialTransport)实现就不能满足要求,因为设备接收到的数据无法知道是给server的请求(Requst),还是给client的响应(Response)。如果要实现上述的双向请求并不复杂,只要修改串行通讯

2020-11-16 18:30:03 139

原创 eRPC:修改erpcgen代码生成模板增加#if#endif宏定义,解决多个eRPC服务共用时类型重复定义问题

最近在用eRPC(https://github.com/EmbeddedRPC/erpc)实现通信时,发现一个问题,当有两个以上eRPC服务共用时会存在类型重定义问题,比如binary_t会在每个eRPC服务的头文件中定义一次。解决这个问题只能修改erpcgen的模板,还好,eRPC模板代码结构比较清晰,很快就找到生成eRPC服务接口头文件的位置(${ERPC_ROOT}/erpcgen/src/templates/c_common_header.template)只要添加类似如下的宏定义就可以解决问

2020-10-24 17:40:31 143

原创 cygwin下编译报错 `addrinfo hints‘ has incomplete type and cannot be defined

今天在cygwin下编译一个linux项目时报了类似下面的错误:server.cpp:20: error: aggregate `addrinfo hints' has incomplete type and cannot be definedserver.cpp:25: error: `AI_PASSIVE' was not declared in this scopeserver.cpp:27: error: `getaddrinfo' was not declared in this scope

2020-10-22 14:20:37 402

原创 activmq:android平台下使用openwire协议连接activemq服务的问题

如果在android平台连接activemq服务,应该怎么实现呢?大部分网上的文章都是eclipse 提供的paho MQTT client实现。如果你只是用消息发布/订阅功能,那么用paho MQTT client就足够了。但是MQTT协议只支持消息发布/订阅,所以如果你需要使用生产者/消费者模型,就不能用MQTT协议了。我就遇到这样的需求,需要在android平台以消费者身份接收消息队列的数据。于是我尝试使用activemq提供的activemq-client库来连接activemq服务.// h

2020-09-04 15:10:32 224

原创 java (多网卡环境下)发送组播广播(multicast/broadcast)失败问题

java发送组播或广播包并不复杂网上有很多文章,比如下面的两篇:《Java实现组播(multicast)简单例子》《Java 网络编程案例:使用 MulticastSocket 实现多点广播》这些例子都大同小异,拿来就可以用,我刚开始使用组播/广播时就是这样抄个例子,编译,运行,收到消息—完美但是,当我们的项目在开始运行时,发现问题来了:有时会收不到某台主机发送的组播包,开始以为是路由器或交换阻止组播包通过,就改为广播.改为广播后,发现问题依然存在.经过反复测试,发现了规律,当电脑上有多块网卡(虚

2020-09-03 10:21:24 517

原创 关于在android平台使用nanohttpd实现的http服务在WIFI环境下响应明显太慢的问题

本文的标题是按我在实际项目中遇到的情况来表述的,其实这个标题并不准确,当我搞清楚问题的原因后,觉得准确的标题应该是 《关于nanohttpd (2.3.1)运行响应变慢的问题》,也就是说问题的发生与android平台和WIFI环境没有直接关系,与nanohttpd版本有关。nanohttpd 是什么这就不介绍了,我们在开发一个项目时要在android平台上实现一个WEB服务,就用到了nanohttpd.确实挺好用的,这个框架很小,但扩展性很好,没花多少时间就实现项目需要的WEB服务,开发测试都正常。但是

2020-08-26 12:33:53 293

原创 maven:命令行执行junit 测试示例

有时间我们希望在命令行执行JUNIT测试,该怎么做呢?举例说明吧。如下我要在命令行执行common-base2项目下的junit 测试类NetworkTest.java 测试类的testGetPhysicalNICs方法,执行如下命令:mvn -Dtest=NetworkUtilTest#testGetPhysicalNICs -DskipTests=false test-Dtest=$class#method定义要执行的测试类及方法,如果不指定方法名则默认执行该测试类的所有方法-DskipTe

2020-07-08 15:21:55 991

原创 commons-configuration2提供的变量插值(Variable Interpolation)功能

通常我们用apach的configuration2库来管理配置文件(org.apache.commons:commons-configuration2),在commons-configuration2管理的配置文件中,配置变量的值可以引用变量。比如以下的配置文件中使用的${env:FACELOG_HOME}就指代环境变量FACELOG_HOME,${sys:user.home}指代java的user.home属性:<?xml version="1.0" encoding="UTF-8"?>

2020-06-24 13:08:34 270

原创 maven: 解决 release to oss.sonatype.org 报错:SSL peer shut down incorrectly

今天执行mvn release:perform发布项目jar包到maven中央仓库时报了如下错误导致发布失败:Remote host terminated the handshakeSSL peer shut down incorrectly出现这个情况并是必然的,目前没有找到规律,好像发布比较大的jar出现的概率就大一些。有时失败后重新执行一遍又能正常通过。所以就没在意,但是今天发布一个超过100MB的jar包时,执行了5,6次都报如上的错误就不能忍了。google上搜索了一相关的主题,发现好

2020-06-05 15:41:19 390

原创 android下使用JNA

jna在windows和linux下使用都很简单只要导入jna.jar就可以,maven中如下引入就可以了 <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>5.5.0</version> </dependency>但是在android下要使用jna可就没这么简

2020-06-05 10:46:38 937

原创 windows下编译boost的参数说明

windows下命令编译boost的基本参数说明(以1.62为例):bjam install ^ --prefix=E:\caffe-static\release\boost_windows_vc140_x86_64_md ^ --without-python -a -d+3 -q -j8 ^ --debug-configuration ^ link=static ^ runtim...

2020-05-06 10:42:47 286

原创 C++11模版元编程:如何判断一个类型是完整类型(complete type)

什么是完整类型(complete type)?要明白这个概念不如先从不完整类型(incomplete type)开始.简单说,如果在编译期编译器能计算出一个类型的size,那么它就是一个完整类型,否则就是不完整类型。比如如下的向前声明,编译器遇到它时,并无法判断student这个类型有占用多大的空间,所以它就是一个不完整类型:struct student *ps;当编译器遇到stude...

2020-04-25 18:32:51 504

原创 erpc(EmbeddedRPC)入门笔记

RPC最近在忙一个IOT设备的项目,想设计一个通信系统通过串口控制设备(freertos)的运行。按照传统的设计思路,先要定义一套串口通信协议,在这套协议中传输层协议、应用层协议一个都不能少。每一层协议都要自己实现。数据编码/解码,数据校验,容错,这些非常基础的东西都要自己实现。等这些协议都实现了,才是能开始设计真正的业务逻辑。和同事商议后,一致认为要是照这么干,黄花菜都凉了。我们的生命不能...

2020-04-18 11:53:26 1163

原创 c++11:如何判断std::function对象相同?

我们知道std::function的实质就是个函数指针,但在c++11中std::function并没有实现操作符==(要到C++20才实现),所以我们无法使用==操作符来判断两个std::function对象是否相等,虽然我们明明知道它就是个指针。但我还是要判断啊,怎么办?仔细研究了std::function的定义,找到了这个 target()函数,c++11标准的官方定义就是返回函数指针,...

2020-04-06 18:24:21 1307 2

原创 c++11:枚举类型(enum)的前向声明(forward declaration)

在C++11之前,C++标准是不支持枚举类型的前向声明的。我说出这个结论,肯定有用msvc的童鞋不愿意了:口胡,MSVC明明就可以对枚举类型前向声明,下面这样的前向声明在MSVC下好好的,没有任何问题。enum E;是哦,你说的对,MSVC下上面的写法的确是没问题,那因为MSVC提供了这个特征,但放在gcc下编译试试,立即报错:use of enum E without previous...

2020-03-25 14:45:48 1891 2

原创 spring boot: java.lang.AbstractMethodError: org.apache.bval.jsr303.ApacheValidatorFactory.close()V

今天在用spring boot启动服务时发生了如下的异常:[main][ERROR] (SpringApplication.java:771) Application startup failedjava.lang.AbstractMethodError: org.apache.bval.jsr303.ApacheValidatorFactory.close()Vat sun.reflec...

2020-03-12 14:17:54 597

原创 NV21转RGB或BGR的java实现和C实现

NV21是android平台摄像设备输出的标准格式,经常需要将它转为RGB或BGR格式,以下是NV21格式图像矩阵转为RGB/BGR的实现代码,代码在windows/linux/android平台测试通过.NV21格式的具体定义参见: 《YUV(NV21)图像数据到RGB颜色空间的转换》关于YUV与RGB的转换网上有很多文章,参见:《YUV与RGB互转各种公式》java实现 /** ...

2020-03-07 17:53:41 777

原创 activemq:INFO: Broker not available at: service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi

(win7系统下)我用jdk7下启动apache activemq 5.14.5服务后,在用命令activemq stop停止服务时遇到文章标题的错误,服务没有被停止。C:\ >activemq stopJava Runtime: Oracle Corporation 1.7.0_55 C:\Program Files\Java\jdk1.7.0_55\jreHeap sizes: ...

2020-01-16 10:30:04 1131

原创 Activemq获取消费者数量(consumerCount)

最近开始学习activemq系统的使用,关于如何在activemq中时实获取一个主题/队列(topic/queue)的订阅/消费者数量,让我花了挺多时间才搞明白:在activemq中,可以通过订阅主题或队列对应的消息管理主题,从而获取咨询消息(Advisory Message),每当新增/减少订阅者时都会收到相关的咨询消息。Advisory Message中就包含了一些我们想要的数据(包含在...

2020-01-08 17:47:52 1609

原创 maven:从命令行(commandline)读取取pom.xml中的属性(property)

如何在命令行(shell)读取pom.xml中的属性呢?我在网上找到如下回答:https://stackoverflow.com/questions/23802951/get-pom-xml-property-from-commandline就是用maven的内置插件 maven-help-plugin 来实现,在windows 命令行下如下实现:mvn help:evaluate -De...

2019-12-01 11:22:46 502

原创 guava:Cache中使用数组(Object[],int[]...)作为KEY

guava是google的一个开源的基础java库,其中提供了一个非常有用的缓存(cache)功能。创建cache的过程大概如下:LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder() .maximumSize(1000) .expireAfterWrite(10, TimeUnit.MINU...

2019-11-15 18:18:27 515

原创 nanohttpd:实现跨域(CORS)请求

NanoHTTPD是一个轻量级的HTTP服务器,可以很方便地嵌入到Java程序中。所以在android平台上有广泛的使用。NanoHTTPD默认是不支持访问跨域(CORS)请求的。如果希望自己的NanoHTTPD服务支持CORS,就要自己实现对CORS请求的响应。关于什么是CORS,这个文档有非常详细、清晰、全面的阐述:《HTTP访问控制(CORS)》,如果还不太清楚CORS机制的童鞋,建议...

2019-10-15 16:36:49 573

原创 linux shell:判断git工作文件夹是否干净(clean)

git diff如果你不关注未纳入版本控制的文件(untracked)的文件,使用git diff就可以判断git工作文件夹是否干净,如果是干净的,git diff将没有输出,否则输出修改的文件的差异#!/bin/bashif [[ -n $(git diff --stat) ]]then echo 'dirty'else echo 'clean'fi如果觉得判断字符串是...

2019-09-10 09:57:30 1533

原创 linux:根据主进程查找子进程

如下是我的项目中创建的一个java系统服务在通过systemctl status显示的服务状态$ systemctl status facelog● facelog.service - facelog service Loaded: loaded (/etc/systemd/system/facelog.service; enabled; vendor preset: enabled)...

2019-09-07 18:20:45 1654

libb64--base64编码解码库

libb64是实现base64编码解码的开源库,还提供了C++封装,用起来挺方便

2016-03-31

erpcgen-windows-x86_64.zip

用cygwin编译的erpcgen,可以windows下直接通过IDL编译生成client/server端(C++)代码,有cygwin的童鞋也可以自行编译,很方便的。 erpc git仓位置: https://github.com/EmbeddedRPC/erpc

2020-09-17

windows下MSVC兼容的dirent.h

<dirent.h>是一个应用程序接口,主要用于文件系统的目录读取操作,主要提供了几个目录数据读取函数,<dirent.h>是unix系统下常见的接口,但windows平台的MSVC编译器并没有提供这个接口( Cygwin5 and MingW现在已经提供了dirent接口),对于跨平台的项目开发就会带来一些麻烦,如果在MSVC下编译时可能因为windows平台缺少这个接口就要为windows平台另外写一些代码。本资源是从网上找的,提供了windows下为MSVC实现的dirent.h接口实现,方便跨平台开发和移植。

2016-03-31

10km的留言板

发表于 2020-01-02 最后回复 2020-02-27

求助:msvc 数据对齐的问题__declspec(align(n))

发表于 2016-05-24 最后回复 2019-03-15

C++11 你真的会用迭代器(iterator)么?

发表于 2015-11-22 最后回复 2017-03-13

SWT addFilter热键监听检测不正常的问题

发表于 2016-12-10 最后回复 2016-12-13

cmake 动态链接库(so)中静态链接tcmalloc,该怎么设置编译选项?

发表于 2015-12-28 最后回复 2016-05-24

从编译优化执行的角度,i++,i-- 哪种循环效率高一些?

发表于 2015-11-22 最后回复 2015-12-28

C++11:模板判断T是否有==操作符

发表于 2015-12-09 最后回复 2015-12-28

找到一款不错的网络可视电话软件,赶快注册吧

发表于 2003-04-24 最后回复 2003-04-27

奇怪的FTP下載問題!!!

发表于 2002-10-22 最后回复 2002-10-24

网络还原大师?

发表于 2002-05-30 最后回复 2002-05-30

急:在Windows NT/2000安全问题,欢迎赐教!

发表于 2001-12-13 最后回复 2001-12-19

哪里可以找到PCTC开发包和运行包?(只能给这么多了)

发表于 2001-06-03 最后回复 2001-06-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除