首页
学习
活动
专区
工具
TVP
发布

白驹过隙

专栏作者
56
文章
84837
阅读量
28
订阅数
缺少动态连接库.so--cannot open shared object file: No such file or directory
总结下来主要有3种方法: 1. 用ln将需要的so文件链接到/usr/lib或者/lib这两个默认的目录下边
Aichen
2019-05-25
6K0
ACE - 代码层次及Socket封装
原文出自http://www.cnblogs.com/binchen-china,禁止转载。
Aichen
2018-09-27
7660
ACE - ACE_Task源码剖析及线程池实现
原文出自http://www.cnblogs.com/binchen-china,禁止转载。
Aichen
2018-09-27
1.1K0
MySQL - MySQL++在c++11环境下接口设计
安装官方提供的mysqlconnect后,可以使用mysql++库,在官方的C API上再次做一个c++面向对象封装。 这里mysql++的安装依赖于mysql-connector-c。安装参考:http://dev.mysql.com/doc/connector-c/en/connector-c-installation-source-unix.html c++11下注意: 1.由于mysql++并没有采用c++11,所以在使用的时候报了一些警告,需要对源码进行修改。 2.在获取字段类型的API在g++
Aichen
2018-06-25
5790
架构设计 - Server设计草稿
DMServer Framework  主要属性: 四个模块部署在不同服务器,双层部分考虑主备和分布式部署。 架构可依据具体前端需求进行裁剪,灵活配置。 gate用于业务框架分布式部署,在业务量可控范围可取消,做集中控制。 所有除gate服务均挂载在MQ上,需要做集群的服务以MQ队列名称做为集群名称,一个集群提供一个MQ队列,无集群默认提供一个MQ队列。集群上的节点以竞争方式消费队列数据。 对app只开放gate和proxy,gate以短连接形式获取proxy地址,proxy为长连接。 Maintain需要
Aichen
2018-06-25
5560
内存管理 - MEMORY POOL
内存池优势: 效率高,频繁的new和delete效率低下 减少内存碎片,反复向系统申请和释放内存会产生大量内存碎片 防止内存泄露 内存池设计思路:     内存池可以根据实际需要,设计成不同的样子。下面是针对网络中数据传输设计的一个内存池。     内存池:在初始状态获取的堆区一大块内存。     内存页:根据需要,将内存池划分成若干内存页,进行管理。     内存块:内存页内的内存最小单元,用于直接传递给申请者使用。     由于网络传输数据大小有限制,但又不统一,且内存占用时间短,发送前申请,发送完毕释
Aichen
2018-06-25
3230
Protobuf - 使用scons编译proto文件
使用protobuf过程中,需要先对消息结构进行定义,文件以.proto格式结尾。然后要使用google提供的protoc命令行,把.proto文件转成对应的代码文件。 protoc --proto_path=IMPORT_PATH --cpp_out=DST_DIR path/to/file.proto 这个步骤看起来非常简单,但是在实际项目中,编译过程文件众多,不可能对这个进行单独生成和编译。新的代码文件要保证能随时更新引入。 最后通过scons,研究了会builder,自己定义了protobu
Aichen
2018-06-25
1.1K0
RabbitMQ - TcpConnection析构引发的一次handshake_timeout
使用RabbitMQ时,连接rabbit-server一直连接失败,代码没有任何错误提示。但是通过rabbitmqctl始终查询不到连接以及创建的queue等信息。 官方的文件demo里面也没有TcpConnection相关例子,只在github上有些简单说明。 然而网上几乎所有人都依然还是在使用Connection,几乎没有使用TcpConnection的例子。最后还是放弃了网络求助,老老实实看源码定位了。 使用tcpdump确认,代码这边的TcpConnection确实是已经向rabbit-se
Aichen
2018-06-25
1.3K0
RabbitMQ - 引入库产生的一次pthread_create错误
最近在项目中使用rabbitMQ,在引入编译生成的libamqpcpp.so库文件,由于各个文件夹之间需要使用静态库进行连接,所以在引入libamqpcpp.so基础上再进行了一次.a文件生成。编译执行文件在实际使用中却产生连接错误,提示pthread_creat无法找到。但是通过排查,代码均为单线程处理,且考虑后期业务处理,在编译脚本也引入了-pthread。翻阅网上资料,大多提示此错误也均为未引入-pthread。 最后确认确实是libamqpcpp.so库报上来的错误,也就是说,是libamq
Aichen
2018-06-25
4510
缺少动态连接库.so--cannot open shared object file: No such file or directory
总结下来主要有3种方法: 1. 用ln将需要的so文件链接到/usr/lib或者/lib这两个默认的目录下边 ln -s /where/you/install/lib/*.so /usr/lib sudo ldconfig 2.修改LD_LIBRARY_PATH export LD_LIBRARY_PATH=/where/you/install/lib:$LD_LIBRARY_PATH sudo ldconfig 3.修改/etc/ld.so.conf,然后刷新 vim /etc/ld.so.conf ad
Aichen
2018-06-25
1.6K0
架构设计 - 日志管理接口设计
在后端代码中,日志无处不在,设计一套自己的日志管理代码,给框架提供一套好用的日志接口将大大方便代码的开发。 其中在日志管理代码的编写中,主要有以下难点: 1.数目不确定的入参函数编写 2.日志权限控制 3.日志输出形式。 接口设计: 1.提供三类日志打印形式:1)控制台打印信息,类似printf的接口封装             2)函数追踪接口,打印当前代码的文件名,函数名及行,以及一些设定的输出参数             3)日志打印函数,提供打印级别控制,且打印内容输出到日志文件中 2.提供日志级别
Aichen
2018-06-25
6110
Samba - 文件共享服务器的搭建和配置
下载与安装: deb包安装     官方deb包下载:http://packages.ubuntu.com/      命令安装dpkg –i xxxx.deb (安装不成功留意日志安装依赖包) apt安装      apt-get install samba 测试是否安装成功:      直接目录访问Linux ip:\\192.168.xxx.xxx      如果能访问将展示一个空的目录,说明安装成功。访问失败则安装失败。 访问配置:      修改配置文件 vi /etc/samba/smb.con
Aichen
2018-06-25
1.9K0
Jenkins - 持续集成环境搭建
1. Jenkins 概述     Jenkins是一个开源的持续集成工具。持续集成主要功能是进行自动化的构建。自动化构建包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。 2. Jenkins功能 主要功能:   l   代码库(svn/git等)代码发生变化后更新代码至jenkins工作目录   l   代码变化后启动编译或设置定时编译   l   输出编译结果,包括生成的目标文件   l   邮件通知构建结果 3. Jenkins构建过程     1. 向代码库提交代码
Aichen
2018-06-25
1.5K0
线程同步(四)—— 信号
这篇是进程线程的博文的最后一篇了,至此进程线程的所有同步内容已经全部回顾完了。 其中信号和信号量看起来名字很像,实际上却是完全不一样的两个东西,信号和信号量在进程线程中都可以使用。而且使用方式也基本完全一样。 进程中的共享内存,线程中的互斥锁,条件变量。这些是独有的,但实际也能互相使用,《Unix网络编程》中对这些的总结是按需所用。 前面提到过线程回收,类似进程回收,线程回收的pthread_join也是接收子线程的销毁消息。 使用kill -l查看linux中的信号。 这次还是使用USR1
Aichen
2018-06-14
5400
进程同步(四)—— 消息队列
消息队列使用的API与信号量、共享内存类似。 消息队列、信号量、共享内存均可用ipcs命令查看以及ipcrm删除。 msgget首先向内核获取一个消息队列ID。 获取成功后,可用msgctl获取和设置队列相关信息。 msgsnd用于写消息队列。 msgrcv用于读消息队列。 消息队列遵循First In ,First Out规则。 下面是消息队列相关实现代码。 1 //queuewrite.cpp 2 #include <sys/types.h> 3 #include <
Aichen
2018-06-14
7470
进程同步(三)—— 信号
程序在执行过程经常产生信号,有些是由内核发出,有些是由用户发出。 执行命令kill -l可以查看信号。 这些信号由系统定义,他们不是简单的int之类的数据类型,可能是调用一些函数。 这些信号
Aichen
2018-06-14
7630
Redis - hash类型操作
hash 类型操作 设置操作: hset:    hset key filed value        创建指定key的filed-value名值对 hsetnx:    hset
Aichen
2018-05-18
1.1K0
Redis - string类型操作
以个人信息为例操作string类型 设置操作: set:         set key value                    创建key-value名值对 setn
Aichen
2018-05-18
8120
Redis - 介绍及安装
Redis属于key-value数据库,与传统的数据库存在很大区别,Redis以命令的方式代替了复杂的SQL语句,并且属于内存库性质,所以运行速度非常快。内存数据会生成数据库文件保证数据持久化。 Redis中没有传统数据库的表、字段,主键等概念。以直观的数据结构方式存储数据。Redis支持以下几种类型数据存储: string(key-value) hash(key-filed-value) list(key-value) set(key-value) sort set(key-score-value
Aichen
2018-05-18
5830
Socket编程回顾,一个最简单服务器程序
第一次接触服务器是快毕业的时候,是不是有点晚(# ̄ω ̄),这也导致工作方向一直没考虑网络编程这块,做了好多其他没啥“意思”的技术。 之前看到一篇博文提到程序猿80%都是庸才,10%是人才,10%是天才,深有感触。仔细想想自己是不是也是还在那80%里面挣扎?一个抱怨这抱怨那的trouble maker,写着烂的掉渣的代码,永远在别人身后不思进取,给剩下的20%的同事埋雷。 扯远了,重新回顾Socket,温习下Linux内核是怎么处理Socket的吧。 文件描述符,在网络编程中经常提及这个词,当时初
Aichen
2018-05-18
4400
点击加载更多
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档