今天碰到了Java版本的问题

windows机器上开发,是java12,目标机器装的是java8

代码用java12编成jar包,跑目标机器上运行,提示Jar包编译的版本是56,当前java版本只能运行编译52的代码。

解决:在windows的开发机器上打包的时候,用java8打包即可。或者升级目标机器的java版本。
所以,开发环境尽量与部署环境java版本一致。

 

中间还有一个问题,在Java12上,InputStream有一个方法 byte[] readAllBytes(),改成Java8后,就用不了啦!
要改成这样:
int len = stream.available();
byte[] ary = new byte[len];
stream.read(ary);

 

还有一个诡异的问题,跑的时候总是报NoClassFound

这个问题搞不清楚怎么回事。后来我新建了一个maven工程,东西都复制过去,用pom.xml自动依赖加上包,就能运行。
然后再回来把没用的jar包先清理掉,发现用12版本编译的时候,eclipse中项目属性->Java Build Path,Libraries那页,是分Modulepath和Classpath的,jar包必须放在Classpath里面才行。不知怎的有一个jar包放到Modulepath里面去了,就坏了。
而用Java8编译的时候,都是堆在一起的
也可能不是这个解决方案,反正新建一个maven工程是好的,大不了用Maven重新来一遍呗。

openssl移植到ARM-Linux

src: https://blog.csdn.net/xiansong1005/article/details/80977873

openssl简介
OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,
并提供丰富的应用程序供测试或其它目的使用。

开发环境
Ubuntu 16.04
arm-arago-linux-gnueabi-gcc version 4.5.3
开发环境不一定是我这配置,只要是linux操作系统,和ARM对应的交叉工具链就可以。

目标环境
ti arm335x
内核版本:3.2

移植步骤
1.从OpenSSL官网下载最新源码 openssl-1.0.2o.tar.gz。
2.执行下面命名解压缩:

tar zxvf openssl-1.0.2o.tar.gz

3.进入刚解压的目录cd openssl-1.0.2l/,执行下面指令,做相应的配置:

./config no-asm shared --prefix=/usr/local/shared/openssl

no-asm: 是在交叉编译过程中不使用汇编代码代码加速编译过程,原因是它的汇编代码是对arm格式不支持的。
shared :生成动态连接库。
–prefix :指定make install后生成目录的路径,不修改此项则默认为OPENSSLDIR目录(/usr/local/ssl)。

4.修改Makefile:

CC= arm-arago-linux-gnueabi-gcc #有更改
CFLAG= -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN -O3 -fomit-frame-pointer -Wall #如果有-m64删除
DEPFLAG= -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_LIBUNBOUND -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_SSL2 -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST -DOPENSSL_NO_WEAK_SSL_CIPHERS
PEX_LIBS=
EX_LIBS= -ldl
EXE_EXT=
ARFLAGS=
AR= arm-arago-linux-gnueabi-ar $(ARFLAGS) r #有更改
RANLIB= arm-arago-linux-gnueabi-ranlib  #有更改
RC= windres
NM= arm-arago-linux-gnueabi-nm #有更改
PERL= /usr/bin/perl
TAR= tar
TARFLAGS= --no-recursion
MAKEDEPPROG= arm-arago-linux-gnueabi-gcc #有更改
LIBDIR=lib

 

注:上面各项都是修改后的,没有增加内容,只是在原来基础上做修改,已标记更改位置。

5.执行下面命令,编译OpenSSL库:

make

6.执行下面命令,将编译好的库文件拷贝到指定目录:

make install

如下图所示在当前目录下的__install目录下生成了头文件和库文件:

bin include lib ssl

7.include下文件在编译程序的时候需要指定include的路径。而lib下在程序运行时会用到,需要将lib下文件拷贝到开发板中。

在linux上交叉编译rasberry可执行程序

1)先装好gcc、g++(重要!,一定要装好g++,不然就给我报了个segmentation fault,找了老半天原因)
sudo apt-get install gcc
sudo apt-get install g++

2)装交叉编译工具
sudo apt-get install gcc-arm-linux-gnueabihf
sudo apt-get install g++-arm-linux-gnueabihf
(树莓派是gnueabihf,带hf的)
会装上gcc-7-arm-linux-gnueabihf / gcc-7-dev-arm-linux-gnueabihf / g++-7-arm-linux-gnueabihf 等一大堆包

测试:
1)arm-linux-gnueabihf-gcc –v
能正确显示版本信息

2)编译一个简单的hello world试试看
hello.c文件内容

#include "stdio.h"

int main(void) {
  printf("hello world!\n");
  return 0;
}

然后编译
arm-linux-gnueabihf-gcc hello.c -o hello
再看看elf头
readelf -h hello

能看到
Machine: ARM
Flags: …, hard-float ABI
这个文件在linux下是运行不来的,要拿到树莓派上运行,结果能正常显示hello world! 你就成功了

参考:
https://www.cnblogs.com/flyinggod/p/9468612.html

git断点续传

git download网络资源,经常断掉,改用fetch,比如:

     mkdir common
     cd common
     git init
     git fetch http://android.git.kernel.org/common.git

传完后,

     git branch -a
     git checkout remotes/....

如果中间断掉了, 可以直接进入common目录, 继续git fetch就可以续传了.

sqllocaldb在IIS中部署失败

错误提示:

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. 
Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 50 - Local Database Runtime error occurred. Cannot create an automatic instance. See the Windows Application event log for error details.

或者

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 50 - Local Database Runtime error occurred. 在 LocalDB 实例启动期间出错: 无法启动 SQL Server 进程。)

 

  1. 先检查一下sqllocaldb的版本!
    我在开发时候用的是v13.00.4001,而部署的时候找了个sql 2012 express localdb,然后就悲剧了。后来感觉是版本问题,换成sql 2016 localdb就好了。

 

2.IIS配置:
(IIS Root)\Application Pools:
点击需要的pool,右边选Advanced Settings…,跳出的框里面Process Model\Load User Profile(加载用户配置文件)从false改成true,

然后文件:
C:\Windows\System32\inetsrv\Config\applicationHost.config
就会出现processModel loadUserProfile=”true”,自己在后面加上setProfileEnvironment=”true”

<add name="ASP.NET v4.0" autoStart="true" managedRuntimeVersion="v4.0">
    <processModel identityType="SpecificUser" userName="administrator" password="**********" loadUserProfile="true" setProfileEnvironment="true" />
</add>

 

 

主要参考:https://www.cnblogs.com/jjseen/p/5989754.html

提到的其他参考:

[1] Local Data Overview http://msdn.microsoft.com/en-us/library/ms233817.aspx

[2] SQL Server 2012 Express LocalDB http://technet.microsoft.com/en-us/library/hh510202.aspx

[3] Introducing LocalDB, an improved SQL Express http://blogs.msdn.com/b/sqlexpress/archive/2011/07/12/introducing-localdb-a-better-sql-express.aspx

[4] LocalDB: Where is My Database? http://blogs.msdn.com/b/sqlexpress/archive/2011/10/28/localdb-where-is-my-database.aspx