山西网站制作,网页如何制作出来的,国外产品设计网站推荐,外贸网站建设推广公司前景如何1. 权限
1.1 给文件添加执行权限
chmod x autogen.sh1.2.给当前文件下的所有文件改变为读写执行权限
chmod 777 * -R 2.环境安装
2.1安装automake 1.4.1
安装链接
安装中遇到的问题及解决
2.2安装autoconf
2.3 安装libtool
2.4 安装Cmake(CMake包含)
cmake安装在cent…1. 权限
1.1 给文件添加执行权限
chmod x autogen.sh1.2.给当前文件下的所有文件改变为读写执行权限
chmod 777 * -R 2.环境安装
2.1安装automake 1.4.1
安装链接
安装中遇到的问题及解决
2.2安装autoconf
2.3 安装libtool
2.4 安装Cmake(CMake包含)
cmake安装在centos上
2.5 安装java
卸载openjdk安装jdk
3.linux环境下编程预热
3.1前备知识 makefile:与平台相关的用于组织项目编译链接的这样一种文件make 是用来执行Makefile的 CMakeLists.txt:是一种跨平台的组织项目编译和链接的文件最后会转化为与平台相关的makefile; Cmakes是一种构建工具cmake是跨平台项目管理工具可以生成makefile也可生成CmakeLists.txtcmake命令执行的CMakeLists.txt文件。CMakeLists.txt一般都是自己写。 具体使用时Linux下小工程可手动写Makefile大工程用automake来帮你生成Makefile要想跨平台就用cmake。 如何在Linux环境下编程可以选用VS2019cmake的方式实现远程开发 vs2019cmake linux远程开发 make makefile cmake的解释 自动构建makefile的工具autotools或者automake CMake工具 CMakeLists.txt
CMakeLists.txt的编写教程
Cmake命令教程 CMake语法解析 CMakeLists.txt 的语法比较简单由命令、注释和空格组成命令由命令名称、小括号和参数组成参数之间使用空格进行间隔 常用命令 官方手册命令 cmake_minimum_required
#指定运行此配置文件所需的 CMake 的最低版本
project
#项目名称
add_executable
#编译成可执行文件
aux_source_directory(dir variable)
#该命令会查找指定目录下的所有源文件然后将结果存进指定变量名。
#aux_source_directory(. DIR_SRCS)
#add_executable(Demo ${DIR_SRCS})
add_subdirectory
#添加子目录
target_link_libraries
#添加链接库
add_library
# 生成链接库
configure_file
## 加入一个配置头文件用于处理 CMake 对源码的设置
set
# 设置变量值例子1 # CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)# 项目信息
project (Demo3)# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)# 添加 math 子目录
add_subdirectory(math)# 指定生成目标
add_executable(Demo main.cc)# 添加链接库
target_link_libraries(Demo MathFunctions)math文件下的CMakeLists.txt
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)# 生成链接库
add_library (MathFunctions ${DIR_LIB_SRCS})例子2例子2 常用变量 官方手册cmake变量 变量名含义PROJECT_NAMEproject命令中写的项目名CMAKE_VERSION当前使用CMake的版本CMAKE_SOURCE_DIR工程顶层目录即入口CMakeLists文件所在路径PROJECT_SOURCE_DIR同CMAKE_SOURCE_DIRCMAKE_BINARY_DIR工程编译发生的目录即执行cmake命令进行项目配置的目录一般为buildPROJECT_BINARY_DIR同CMAKE_BINARY_DIRCMAKE_CURRENT_SOURCE_DIR当前处理的CMakeLists.txt所在的路径CMAKE_CURRRENT_BINARY_DIR当前处理的CMakeLists.txt中生成目标文件所在编译目录CMAKE_CURRENT_LIST_FILE输出调用这个变量的CMakeLists.txt文件的完整路径CMAKE_CURRENT_LIST_DIR当前处理的CMakeLists.txt文件所在目录的路径CMAKE_INSTALL_PREFIX指定make install命令执行时包安装路径CMAKE_MODULE_PATHfind_package命令搜索包路径之一默认为空
编译配置相关变量
变量名含义CMAKE_BUILD_TYPE编译选项Release或者Debug如set(CMAKE_BUILD_TYPE Release)CMAKE_CXX_FLAGS编译标志设置C11编译set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -stdc11)CMAKE_CXX_STANDARD也可以设置C11编译set(CMAKE_CXX_STANDARD 11) 执行 cmake . [cmake -i]
make4.Linux下编译dwf2json
4.1通过ssh连接服务器 xshell生成密钥对将生成公钥上传到腾讯云的密钥中相当于公钥追加到了~/.ssh/authorized_keys文件中当然也可以手动添加 #手动添加
cat id_rsa.pub authorized_keys4.2 通过VSCode连接服务器 将本机生成的密钥对放到c盘用户目录下的.ssh文件夹下并且conf中配置 Host 124.221.184.38HostName 124.221.184.38User root将公钥追加到~/.ssh/authorized_keys文件 cat id_rsa.pub authorized_keys如果出现Resolver error: The VS Code Server failed to start 此问题更新vscode的ssh插件即可
4.3 编译jsoncpp 使用cmake来编译jsoncpp先下载jsoncpp 新版本的jsoncpp编译的时候会报错error: ‘hexfloat’ is not a member of ‘std’我在centos上即使设置了c11的编译环境依然报此错因此下载0.10.7老版本的jsoncpp wget https://github.com/open-source-parsers/jsoncpp/archive/refs/tags/0.10.7.tar.gz解压 tar zxvf 0.10.7.tar.gz执行cmake命令 cd jsoncpp-0.10.7/
cmake .
make
make install注意如果生成动态链接库按照下述方式cmake cmake -DCMAKE_BUILD_TYPErelease -DBUILD_STATIC_LIBSON -DBUILD_SHARED_LIBSON -DARCHIVE_INSTALL_DIR. -G Unix Makefiles .网上安装教程
4.4 编译dwfcore和dwftoolkit 现在linux下创建文件夹形成如下目录结构将源代码文件夹gnu以及src放到如下目录结构中 编译dwfcore 进入脚本目录执行脚本 cd /cwb/dwftoolkitcomplie/develop/global/build/gnu/dwfcore
./bulid_setup.sh如果出现换行符的问题 用dos2unix工具对脚本文件进行一个转义并且删除多余空行 进入源文件目录 cd ../../../src/dwfcore进行编译 CXXg -stdc11 ./configure --with-zlibno --with-expatnomake make install编译dwftoolkit 进入脚本目录执行脚本 cd /cwb/dwftoolkitcomplie/develop/global/build/gnu/dwftoolkit./bulid_setup.sh进入源文件目录 cd ../.../../src/dwf进行编译 CXXg -stdc11 ./configure --with-jpegnomake make install将编译好的静态链接库文件和动态链接库文件复制到工程的lib目录下 cp -ri /usr/local/lib/* /cwb/lib/5.5 编译dwf2json
创建工程目录 创建dev 写工程源文件include放置第三方头文件lib放置编译好的第三方静态和动态链接库也即jsoncpp(用哪个版本就用哪个版本的头文件dwfcoredwftoolkit src目录中的头文件 编写CMakeLists.txt 注意我一直以为core需要先链接结果经过几天折腾一直在报错最后发现dwftoolkit实现了core中的方法所以把toolkit放core前面结果不报错乌鱼子 以及在此过程中遇到的一些错误通过加编译选项得以解决例如-lpthread -luuid -lz -ldl cmake_minimum_required(VERSION 3.23.0)
set(PROJECT_DIR /cwb) #设置项目目录
project(dwf2json)
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -stdc11 -g -Wall -Wno-unused-variable -lpthread -luuid -lz -ldl -fPIC)
#库目录
include_directories(${PROJECT_DIR}/include)
#链接目录
link_directories(${PROJECT_DIR}/lib)
# 搜索当前文件下得cpp文件
aux_source_directory(${PROJECT_DIR}/dev DIR_SRCS)
#生成可执行文件
#add_executable(dwf2json ${DIR_SRCS})
#生成动态链接库
add_library(dwf2json SHARED ${DIR_SRCS})
#指定链接库 libjsoncpp.a静态链接库和动态链接库名字重了也会报错
target_link_libraries(dwf2json libjsoncpp.so libdwftk.so libdwfcore.so)
#target_link_libraries(dwf2json newnamelibjsoncpp.a libdwftk.a libdwfcore.a)注意生成动态链接库的时候如果其他链接的是静态链接库会提示我用fpic编译即使用fpic编译其他链接库也依然报错所以最后直接用动态链接库链接 创建release文件夹并在此文件夹下编译
cmake ..
make5.Linux通过jni调用动态链接库
创建与C交互的类
package com.ircrisk.fgdm.libraryofdllorso;
public class GetW3DJsonBySoService {static {System.loadLibrary(dwf2json); //链接库的名字}public native static int getW3DJson(String path,String jsonFile); //链接库的方法
}
编译此交互类生成JNI需要的头文件
javac GetW3DJsonBySoService.javajavah -classpath . -jni com.ircrisk.fgdm.libraryofdllorso.GetW3DJsonBySoService引入生成的头文件重写其中的方法 编译生成动态链接库按理说执行的时候通过-Djava.library.path.此命令指定.so的位置即可成功执行但是执行的时候一直无法找到动态链接库因此放弃使用JNI改用JNA
[Linux下JNI的用法](Jni教程一—Linux下jni调用 - 简书 (jianshu.com))
6.改用JNA调用动态链接库
java调用方的写法
package com.ircrisk.fgdm.libraryofdllorso;
import com.sun.jna.Library;
import com.sun.jna.Native;
ass GetW3DJsonService {public interface GetW3DJsonInstance extends Library {//SimpleW3DStreamProcessorGetW3DJsonInstance INSTANCE (GetW3DJsonInstance) Native.loadLibrary(dwf2json, GetW3DJsonInstance.class);int getW3DJson(String file,String jsonfile);}public synchronized int getW3DJson(String path,String jsonFile){int res GetW3DJsonInstance.INSTANCE.getW3DJson(path,jsonFile);return res;}
C动态链接库的编写通过extern导出接口
extern C{int getW3DJson(const char* file,const char * jsonfile){....}
}Springboot项目只需要把libdwf2json放到resource下的linux-x86-64目录如果不放在linux-x86-64目录下就会报如下错误我也是很奇怪注意linux下生成的so文件会带上lib前缀所以java代码中加载的时候不要写lib前缀加载的时候会自动加上lib前缀 同时在pom文件中进行如下配置防止.so被压缩
buildfinalName${project.artifactId}/finalNamepluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-resources-plugin/artifactIdconfigurationencodingUTF-8/encodinguseDefaultDelimitersfalse/useDefaultDelimitersdelimitersdelimiter/delimiter/delimiters!-- 过滤后缀不需要转码的文件后缀名so--nonFilteredFileExtensionsnonFilteredFileExtensionso/nonFilteredFileExtension/nonFilteredFileExtensions/configuration/plugin/plugins/build8.linux一些相关命令 查看jdk的安装目录 echo $JAVA_HOME
#or
whereis java查找目录下的某个文件 并显示详细信息 find ./ -name automake |xargs ls -l查看linux占用内存最大的十个进程 ps auxw|head -1;ps auxw|sort -rn -k3|head -109.遇到的问题及解决
9.1模型加载到一半404 模型加载到一半前端404后端jjava.io.IOException: Broken pipe 查看nginx日志接口超时upstream timed out nginx增加超时的配置 后端报java.io.IOException: Broken pipe niginx报upstream上游服务器关闭 修改gateway的超时时间即可