- Makefile问答之 04 优化异常与警告设置
捕鲸叉
Linux使用Linux系统编程Makefilelinux
Makefile怎样指定优化选项,包括编译和链接优化,常用的选项有哪些?在Makefile中,你可以通过设置编译器和链接器的选项来指定优化选项。优化选项可以分为编译优化和链接优化,以下是如何在Makefile中指定这些选项,以及一些常用的选项。示例Makefile#编译器CC=gcc#编译选项CFLAGS=-Wall-O2#链接选项LDFLAGS=-O2#需要链接的库LDLIBS=#目标文件TAR
- 老式风格的"后缀规则"
Caiaolun
老式风格的"后缀规则"后缀规则是一个比较老式的定义隐含规则的方法。后缀规则会被模式规则逐步地取代。因为模式规则更强更清晰。为了和老版本的Makefile兼容,GNUmake同样兼容于这些东西。后缀规则有两种方式:"双后缀"和"单后缀"。双后缀规则定义了一对后缀:目标文件的后缀和依赖目标(源文件)的后缀。如".c.o"相当于"%o:%c"。单后缀规则只定义一个后缀,也就是源文件的后缀。如".c"相当
- makefile与cmake的基础使用
小辛学西嘎嘎
linux运维服务器
一、Makefile1.1、简单的Makefile下面是一个最简单的Makefile,其中第二行第四行,前面并不是空格,而是tab。all:@echo"helloall"test:@echo"hellotest"当创建好之后,进行make,当不加任何参数,默认就是第一个:>>make>>helloall在make后可以加参数,指定输出哪一个名称:>>makeall>>helloall>>maket
- Spring Cloud云架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)
初夏_91fb
上一篇我根据框架中OAuth2.0的使用总结,画了SSO单点登录之OAuth2.0登出流程,今天我们看一下根据用户token获取yoghurt信息的流程:image/***根据token获取用户信息*@paramaccessToken*@return*@throwsException*/@RequestMapping(value="/user/token/{accesstoken}",method
- android studio程序打不开,Android Studio project 文件打不开问题解决
成长中的Elva老师
androidstudio程序打不开
现象:Android项目的所有文件都打不开,搜了一圈,和此篇原因可能类似:解决:打开工程,Androidstudio右下角出现error提示:com.intellij.diagnostic.PluginException:TryingtooverridealreadyregisteredfiletypeMakefile[Plugin:name.kropp.intellij.makefile]atc
- Yolo-v3利用GPU训练make时发生错误:/usr/bin/ld: cannot find -lcuda
徐小妞66666
一.利用GPU训练Yolov3时,首先要修改MakeFile文件,修改格式如下:GPU=1(原来为0)CUDNN=1(原来为0)NVCC=/usr/local/cuda/bin/nvcc(新建,注意自己本机的地址)二.此时make产生错误/usr/bin/ld:cannotfind-lcuda1.查看MakeFile文件找到该行代码:LDFLAGS+=-L/usr/local/cuda/lib64
- CMake项目的CMackeLists.txt内容语法详解
过好每一天的女胖子
linuxWindows跨平台cmake跨平台
文章目录1、CMake构建级别2、CMakeLists.txt文件基本结构语法解析宏变量含义1、CMakeCMake(crossplatformmake)是一个跨平台的安装编译工具,可以使用简单的语句描述安装编译过程,输出安装编译过程中产生的中间文件。CMake不直接产生最终的文件,而是产生对应的构造文件,如linux下的makefile,windows下的vs的projects等CMake的编译
- Autosar MCAL从入门到精通系列讲解--总目录
常学常思
Autosar--MCAL从入门到精通嵌入式硬件mcu单片机Autosar
前言欢迎大家一起来学习Autosar,作为一个小白,在最开始的时候也是一脸茫然,不知道如何去学习,如何下手。在这里,我将记录我所有Autosar学习的过程,问题点,以及分享我的代码供大家参考。最终能让大家快速上手。Mcal:可以去官网下载一、EB1.EBtresos创建工程2.EB生成代码编译---makefile二、TricoreMcal实战系列(EB)这里的博客之前都是用S32DS来配置的,在
- elementui Cascader 级联选择器的使用总结
XUE_雪
elementui前端javascript
实现效果技术要点总结如下:1、点击添加自动增加多行,实现自主选择增加多条节点数据2、节点地址使用的是Cascader级联选择器,需要动态生成,涉及到一个技术要点是:因v-modal只能获取value不能获取label,故需要解决在多个动态生成的Cascader分别获取他们选中的label和value,下面开始展示相关代码:html:添加删除确定取消js:handleChange(index){va
- 探索Makefile Tutor:构建自动化神器的技术解析与实践指南
劳泉文Luna
探索MakefileTutor:构建自动化神器的技术解析与实践指南Makefile_tutorThisprojectaimstocreateacrystalcleartutorialonacrypticlookingtopic.项目地址:https://gitcode.com/gh_mirrors/ma/Makefile_tutor在软件开发中,自动化构建是提高效率的关键一环,而Makefile便
- C++ linux下的cmake
陆地鲨鱼-彻
个人学习笔记c++开发语言
cmake是一个帮助我们构建项目的跨平台工具。让我们不需要一次次手动配置makefile,或者手动去链接库这些操作。配置(基于vscode编辑器)在项目main.cpp同级目录下,创建CMakeLists.txt文件,举例内容如下(需自己配置)://指定构建项目所需的最低cmake版本cmake_minimum_required(VERSION3.10)//指定工程的名字(随后输出的可执行文件与其
- 「iOS学习」——Masonry学习
归辞...
ios学习cocoa
iOS学习前言Masonry的属性Masonry的使用基础APIAutoBoxing修饰语倍数中心点设置边距优先级使用总结前言暑假我们学习了使用CocoaPods引入第三方库,实现使用SVG图片。而Masonry作为一个轻量级的布局架构,在使用中可以节省很多时间。故进行简单学习。Masonry的属性UI设计是iOS开发的必须一环,直接影响了app的观感和使用体验。我们通常使用frame框架直接确定
- Ubuntu22 CMake安装使用教程
小朱在敲代码
linuxc++c语言ubuntu
1.CMake简介CMake是一个跨平台的自动化构建系统工具,它被用来管理和控制软件构建过程。CMake使用一个称为CMakeLists.txt的文本文件来描述项目的构建过程。这个文件包含了项目所需的各种设置和指令,比如源文件的位置、编译选项、链接器选项等。CMake并不是一个编译器,而是一个前端工具,它可以生成不同构建系统的脚本,如UnixMakefiles、Ninjabuildfiles、MS
- Linux一周大项目:库的移植
Yao_xiiiin.
linux运维服务器
挂载--->将所需库文件夹复制到nfs文件夹中(不在终端进行)--->cp库文件到开发板/usr/libstep1step3一、解压文件解压zip文件sudounzipxxx.zip解压tar文件sudotar-xvfxxx.tar修改权限sudochmod0777xxx-R二、配置工程./config--shared--CC--host--prefix等等配置工程生成makefile三、make
- 用VCS直接仿真vivado工程
啊节奏不对
vcs仿真fpga开发risc-v嵌入式硬件
用VCS直接仿真vivado工程前言编译vcs仿真库simulation设置RunSimulation写Makefile执行脚本,运行vcs仿真前言在日常搬砖过程中,在ICdesign进行fpga原型验证时,在上fpga测试之前,往往需要对vivado工程进行仿真,而vivado工程中可能存在较多的xilinxip或者blockdesign,直接使用vivado仿真,速度难以接收。如果使用vcs进
- 嵌入式Linux使用sqlite的库源码编译及用户程序的编译
junziruyu53
sqlite数据库
本文章记录了在嵌入式设备中使用sqlite数据库的前期编译工作,工作是在虚拟机ubuntu环境中进行的。首先需要去官网下载sqlite源码,官网地址SQLiteDownloadPage,下载后在虚拟机环境解压,进入文件目录,执行如下命令,将生成Makefile文件。其中,编译器及安装目标路径等需要根据自己的情况进行修改,单纯执行./configure一般不会成功。./configureCC=arm
- Python实现BASE64 算法
闲人编程
密码学python算法开发语言BASE64加解密密码学
目录使用Python实现BASE64算法的博客引言BASE64算法的工作原理BASE64编码表Python面向对象实现BASE64算法代码解析应用场景:在文件传输中的使用总结使用Python实现BASE64算法的博客引言在计算机科学中,BASE64是一种常用的数据编码方式,主要用于在处理文本时对二进制数据进行编码。BASE64编码的主要用途是在需要以文本形式传输二进制数据的场景下(例如电子邮件、U
- Flybirds框架使用总结
自动化测试框架
运行环境Python版本:3.9.9Node版本:20.5.1Pycharm版本:2021.3专业版安装flybirds包打开Pycharm终端,输入如下命令:pipinstallflybirds安装完成后继续输入flybirdscreate然后输入项目名、平台,设备名和包名可以后面再填运行用例以Android自动化测试为例在生成的项目路径fbTest/features/test/android新
- Linux下基于TCP协议的简易服务器实现(C语言)
代码能跑就可以
服务器linuxtcp/ipc语言开发语言
最近在学习Linux应用层开发,学习了基于TCP的简易服务器的搭建,在这里和大家分享分享。关键词:守护进程,TCP,进程和线程,系统调用,Makefile教程:嵌入式Linux应用层开发教程_bilibili目录知识准备服务端(tcp_server)客户端(tcp_client)守护进程(daemon_test)Makefile功能介绍知识准备守护进程:是一种在后台运行的进程,我们常听到的daem
- MAKEFILE
Auv开心
学习
ifneq(,$(filter$(strip$(TARGET_BOARD_PLATFORM)),mt6761mt6768mt6771mt6779mt6785mt6762mt6765mt6739mt8168mt6885mt6873mt6853mt6877mt6833mt6893))MTKCAM_CFLAGS+=-DMTKCAM_CUSTOM_METADATA_COMMON=1elseMTKCAM_C
- echarts使用总结
LeoValiant
echarts堆叠图自适应
1、修改echarts指示线的长度:labelLine:{//指示线长度normal:{length:10}},2、echarts自适应window.addEventListener(‘resize’,function(){myChart.resize();})3、echarts柱形堆叠图注意添加stack属性。series:[{name:‘邮件营销’,type:‘line’,stack:‘总量’
- 【Linux】Makefile项目管理工具(第八篇)
爱编程的小猴
Linuxlinux运维服务器
目录makefile1.0makefile2.0makefile3.0Makefile可以简单的认为是一个工程文件的编译规则,描述了整个工程的编译和链接等规则。其中包含了哪些文件需要编译,哪些文件不需要编译,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重建等等。编译整个工程需要涉及到的,在Makefile中都可以进行描述。换句话说,Makefile可以使得我们的项目工程的编译变得自动化,不
- 更新yum源解决:centos7 安装 Redis ,make编译报错,安装gcc 提示:没有可用软件包 gcc
Freedom______
LINUXrediscentos7gcc没有可用软件包repo源
全程使用的是XShell敲的命令。首先说一下遇到的问题:我的centos是虚拟机。我在物理机上下载好了redis压缩包redis-5.0.5.tar.gz,然后rz命令上传到虚拟机,解压,编译。问题出现了:编译失败[
[email protected]]#makecdsrc&&makeallmake[1]:进入目录“/softwares/redis-5.0.5/src”CCMakefile
- 重头开始嵌入式第二十一天(Linux系统编程 文件相关函数)
FLPGYH
vimlinuxc语言
目录1.getpwuid2.getpwnam3.getgrgid4.symlink在Linux和类Unix系统中,创建软链接(符号链接)的常用指令是ln-s。5.remove6.rename7.link8.truncate9.perror10.strerror11.error1.makefile2.gdbstrtok1.getpwuidgetpwuid函数是C语言标准库中的一个函数,用于通过用户I
- skywalking接入nginx
运维潇哥
skywalkingnginx运维
下载Nginx的插件GitHub-apache/skywalking-nginx-lua:TheNginxLuaagentforApacheSkyWalking~]#cdskywalking-nginx-lua-master/skywalking-nginx-lua-master]#lsCHANGES.mdexampleslibLICENSElicensesMakefilemvnwNOTICERE
- Makefile
嘻嘻嘻Mr.Huang
linux运维服务器
文件编写好以后在Linux命令行中执行一条make命令即可自动编译整个工程。1、Makefile的参数1.目标:即要生成的文件。2.依赖:即目标文件由哪些文件生成。3.命令:即通过执行命令由依赖文件生成目标文件。4.all:Makefile文件默认只生成第一个目标文件即完成编译,但是可以通过all指定所需要生成的目标文件。Makefile中,目标(Target)和依赖(Dependency)是通过
- go语言channle使用总结
xyt001
前言:channel提供了一种通信机制,通过它,一个goroutine可以想另一goroutine发送消息。channel本身还需关联了一个类型,也就是channel可以发送数据的类型。例如:发送int类型消息的channel写作chanint。channel很强大,但是还是有点坑,下面是我个人的总结。1.使用两个值接收channel:<-channel能够返回一个值或者两个值,当返回两个值的时候
- CUDA 问题解决 —— CUDA+MPI出错:"mpi.h" No such file or directory
__Sunny__
CUDAcudac语言
在CUDA源文件里使用MPI时,编译出错Makefile文件:CUDA_INSTALL_PATH=/usr/local/cuda-8.0MPI_INSTALL_PATH=/opt/intel/compilers_and_libraries_2017.0.098/linux/mpi/intel64NVCC=$(CUDA_INSTALL_PATH)/bin/nvccMPICC=$(MPI_INSTAL
- Java 中Lambada表达式中双冒号 ::使用总结
何以解忧,唯有..
java开发语言
一、前言双冒号运算操作符是类方法的句柄,lambda表达式的一种简写表达式:person->person.getName();可以替换成:Person::getName表达式:()->newHashMaplist=Arrays.asList("a","b","c");//静态方法引用ClassName::methodNamelist.forEach(Colon::print);//上一行等价于//
- CMake学习
益达爱喝芬达
C++c++
Cmake工具链预处理器(宏替换)->编译器->汇编器(二进制文件.obj&&.0)->链接器->变成.exe单源文件可以直接命令生成.exe解决1:源文件多时要编写makefile,但编写makefile文件很麻烦解决2:使用cmake,跨平台,可以直接生成makefile命令行直接编译源文件g++*.cpp-oapp会生成一个app.exe./app编写CMakelist.txt#======
- PHP,安卓,UI,java,linux视频教程合集
cocos2d-x小菜
javaUIPHPandroidlinux
╔-----------------------------------╗┆
- 各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
bozch
.net.net mvc
在.net mvc5中,在执行某一操作的时候,出现了如下错误:
各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
经查询当前的操作与错误内容无关,经过对错误信息的排查发现,事故出现在数据库迁移上。
回想过去: 在迁移之前已经对数据库进行了添加字段操作,再次进行迁移插入XXX字段的时候,就会提示如上错误。
&
- Java 对象大小的计算
e200702084
java
Java对象的大小
如何计算一个对象的大小呢?
 
- Mybatis Spring
171815164
mybatis
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
CustomerService userService = (CustomerService) ac.getBean("customerService");
Customer cust
- JVM 不稳定参数
g21121
jvm
-XX 参数被称为不稳定参数,之所以这么叫是因为此类参数的设置很容易引起JVM 性能上的差异,使JVM 存在极大的不稳定性。当然这是在非合理设置的前提下,如果此类参数设置合理讲大大提高JVM 的性能及稳定性。 可以说“不稳定参数”
- 用户自动登录网站
永夜-极光
用户
1.目标:实现用户登录后,再次登录就自动登录,无需用户名和密码
2.思路:将用户的信息保存为cookie
每次用户访问网站,通过filter拦截所有请求,在filter中读取所有的cookie,如果找到了保存登录信息的cookie,那么在cookie中读取登录信息,然后直接
- centos7 安装后失去win7的引导记录
程序员是怎么炼成的
操作系统
1.使用root身份(必须)打开 /boot/grub2/grub.cfg 2.找到 ### BEGIN /etc/grub.d/30_os-prober ### 在后面添加 menuentry "Windows 7 (loader) (on /dev/sda1)" { 
- Oracle 10g 官方中文安装帮助文档以及Oracle官方中文教程文档下载
aijuans
oracle
Oracle 10g 官方中文安装帮助文档下载:http://download.csdn.net/tag/Oracle%E4%B8%AD%E6%96%87API%EF%BC%8COracle%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3%EF%BC%8Coracle%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3 Oracle 10g 官方中文教程
- JavaEE开源快速开发平台G4Studio_V3.2发布了
無為子
AOPoraclemysqljavaeeG4Studio
我非常高兴地宣布,今天我们最新的JavaEE开源快速开发平台G4Studio_V3.2版本已经正式发布。大家可以通过如下地址下载。
访问G4Studio网站
http://www.g4it.org
G4Studio_V3.2版本变更日志
功能新增
(1).新增了系统右下角滑出提示窗口功能。
(2).新增了文件资源的Zip压缩和解压缩
- Oracle常用的单行函数应用技巧总结
百合不是茶
日期函数转换函数(核心)数字函数通用函数(核心)字符函数
单行函数; 字符函数,数字函数,日期函数,转换函数(核心),通用函数(核心)
一:字符函数:
.UPPER(字符串) 将字符串转为大写
.LOWER (字符串) 将字符串转为小写
.INITCAP(字符串) 将首字母大写
.LENGTH (字符串) 字符串的长度
.REPLACE(字符串,'A','_') 将字符串字符A转换成_
- Mockito异常测试实例
bijian1013
java单元测试mockito
Mockito异常测试实例:
package com.bijian.study;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.
- GA与量子恒道统计
Bill_chen
JavaScript浏览器百度Google防火墙
前一阵子,统计**网址时,Google Analytics(GA) 和量子恒道统计(也称量子统计),数据有较大的偏差,仔细找相关资料研究了下,总结如下:
为何GA和量子网站统计(量子统计前身为雅虎统计)结果不同?
首先:没有一种网站统计工具能保证百分之百的准确出现该问题可能有以下几个原因:(1)不同的统计分析系统的算法机制不同;(2)统计代码放置的位置和前后
- 【Linux命令三】Top命令
bit1129
linux命令
Linux的Top命令类似于Windows的任务管理器,可以查看当前系统的运行情况,包括CPU、内存的使用情况等。如下是一个Top命令的执行结果:
top - 21:22:04 up 1 day, 23:49, 1 user, load average: 1.10, 1.66, 1.99
Tasks: 202 total, 4 running, 198 sl
- spring四种依赖注入方式
白糖_
spring
平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我
- angular.injector
boyitech
AngularJSAngularJS API
angular.injector
描述: 创建一个injector对象, 调用injector对象的方法可以获得angular的service, 或者用来做依赖注入. 使用方法: angular.injector(modules, [strictDi]) 参数详解: Param Type Details mod
- java-同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待
bylijinnan
Integer
public class PC {
/**
* 题目:生产者-消费者。
* 同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待。
*/
private static final Integer[] val=new Integer[10];
private static
- 使用Struts2.2.1配置
Chen.H
apachespringWebxmlstruts
Struts2.2.1 需要如下 jar包: commons-fileupload-1.2.1.jar commons-io-1.3.2.jar commons-logging-1.0.4.jar freemarker-2.3.16.jar javassist-3.7.ga.jar ognl-3.0.jar spring.jar
struts2-core-2.2.1.jar struts2-sp
- [职业与教育]青春之歌
comsci
教育
每个人都有自己的青春之歌............但是我要说的却不是青春...
大家如果在自己的职业生涯没有给自己以后创业留一点点机会,仅仅凭学历和人脉关系,是难以在竞争激烈的市场中生存下去的....
&nbs
- oracle连接(join)中使用using关键字
daizj
JOINoraclesqlusing
在oracle连接(join)中使用using关键字
34. View the Exhibit and examine the structure of the ORDERS and ORDER_ITEMS tables.
Evaluate the following SQL statement:
SELECT oi.order_id, product_id, order_date
FRO
- NIO示例
daysinsun
nio
NIO服务端代码:
public class NIOServer {
private Selector selector;
public void startServer(int port) throws IOException {
ServerSocketChannel serverChannel = ServerSocketChannel.open(
- C语言学习homework1
dcj3sjt126com
chomework
0、 课堂练习做完
1、使用sizeof计算出你所知道的所有的类型占用的空间。
int x;
sizeof(x);
sizeof(int);
# include <stdio.h>
int main(void)
{
int x1;
char x2;
double x3;
float x4;
printf(&quo
- select in order by , mysql排序
dcj3sjt126com
mysql
If i select like this:
SELECT id FROM users WHERE id IN(3,4,8,1);
This by default will select users in this order
1,3,4,8,
I would like to select them in the same order that i put IN() values so:
- 页面校验-新建项目
fanxiaolong
页面校验
$(document).ready(
function() {
var flag = true;
$('#changeform').submit(function() {
var projectScValNull = true;
var s ="";
var parent_id = $("#parent_id").v
- Ehcache(02)——ehcache.xml简介
234390216
ehcacheehcache.xml简介
ehcache.xml简介
ehcache.xml文件是用来定义Ehcache的配置信息的,更准确的来说它是定义CacheManager的配置信息的。根据之前我们在《Ehcache简介》一文中对CacheManager的介绍我们知道一切Ehcache的应用都是从CacheManager开始的。在不指定配置信
- junit 4.11中三个新功能
jackyrong
java
junit 4.11中两个新增的功能,首先是注解中可以参数化,比如
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runn
- 国外程序员爱用苹果Mac电脑的10大理由
php教程分享
windowsPHPunixMicrosoftperl
Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里。普通用户喜欢 Mac 可以理解,毕竟 Mac 设计美观,简单好用,没有病毒。那么为什么专业人士也对 Mac 情有独钟呢?从个人使用经验来看我想有下面几个原因:
1、Mac OS X 是基于 Unix 的
这一点太重要了,尤其是对开发人员,至少对于我来说很重要,这意味着Unix 下一堆好用的工具都可以随手捡到。如果你是个 wi
- 位运算、异或的实际应用
wenjinglian
位运算
一. 位操作基础,用一张表描述位操作符的应用规则并详细解释。
二. 常用位操作小技巧,有判断奇偶、交换两数、变换符号、求绝对值。
三. 位操作与空间压缩,针对筛素数进行空间压缩。
&n
- weblogic部署项目出现的一些问题(持续补充中……)
Everyday都不同
weblogic部署失败
好吧,weblogic的问题确实……
问题一:
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [zip:E:/weblogic/user_projects/domains/base_domain/serve
- tomcat7性能调优(01)
toknowme
tomcat7
Tomcat优化: 1、最大连接数最大线程等设置
<Connector port="8082" protocol="HTTP/1.1"
useBodyEncodingForURI="t
- PO VO DAO DTO BO TO概念与区别
xp9802
javaDAO设计模式bean领域模型
O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO。
它们的关系应该是相互独立的,一个VO可以只是PO的部分,也可以是多个PO构成,同样也可以等同于一个PO(指的是他们的属性)。这样,PO独立出来,数据持