linux下的boost库的安装方法是什么?

linux下的boost库的安装方法是什么?,第1张

打开synaptic, 找到libboost-all-dev, 安装即可。

安装后可以查看boost相关库,在/usr/lib/目录下

如:/usr/lib/libboost_date_time.a /usr/lib/libboost_math_tr1f-mt.a /usr/lib/libboost_serialization-mt.so

/usr/lib/libboost_date_time-mt.a/usr/lib/libboost_math_tr1f-mt.so /usr/lib/libboost_serialization.so

/usr/lib/libboost_date_time-mt.so /usr/lib/libboost_math_tr1f.so/usr/lib/libboost_serialization.so.1.42.0

/usr/lib/libboost_date_time.so /usr/lib/libboost_math_tr1f.so.1.42.0 /usr/lib/libboost_signals.a

/usr/lib/libboost_date_time.so.1.42.0 /usr/lib/libboost_math_tr1l.a /usr/lib/libboost_signals-mt.a

/usr/lib/libboost_filesystem.a /usr/lib/libboost_math_tr1l-mt.a /usr/lib/libboost_signals-mt.so

/usr/lib/libboost_filesystem-mt.a /usr/lib/libboost_math_tr1l-mt.so /usr/lib/libboost_signals.so

/usr/lib/libboost_filesystem-mt.so /usr/lib/libboost_math_tr1l.so/usr/lib/libboost_signals.so.1.42.0

/usr/lib/libboost_filesystem.so /usr/lib/libboost_math_tr1l.so.1.42.0 /usr/lib/libboost_system.a

/usr/lib/libboost_filesystem.so.1.42.0 /usr/lib/libboost_math_tr1-mt.a /usr/lib/libboost_system-mt.a

/usr/lib/libboost_graph.a /usr/lib/libboost_math_tr1-mt.so /usr/lib/libboost_system-mt.so

/usr/lib/libboost_graph-mt.a/usr/lib/libboost_math_tr1.so /usr/lib/libboost_system.so

/usr/lib/libboost_graph-mt.so /usr/lib/libboost_math_tr1.so.1.42.0 /usr/lib/libboost_system.so.1.42.0

/usr/lib/libboost_graph.so /usr/lib/libboost_prg_exec_monitor.a /usr/lib/libboost_test_exec_monitor.a

/usr/lib/libboost_graph.so.1.42.0 /usr/lib/libboost_prg_exec_monitor-mt.a /usr/lib/libboost_test_exec_monitor-mt.a

复制代码头文件在/usr/include/boost下gnuser@ubuntu:~$ ls /usr/include/boost/

accumulators date_time.hpp io_fwd.hpp pointer_cast.hpp spirit

algorithmdetailiostreams pointer_to_other.hpp spirit.hpp

aligned_storage.hpp dynamic_bitsetis_placeholder.hpp pool statechart

any.hpp dynamic_bitset_fwd.hppiterator preprocessor static_assert.hpp

archive dynamic_bitset.hppiterator_adaptors.hpp preprocessor.hpp strong_typedef.hpp

array.hppenable_shared_from_this.hpp iterator.hpp program_optionsswap.hpp

asio exception lambda program_options.hppsystem

复制代码boost库命名:

比如libboost_regex-vc71-mt-d-1_34.lib,

lib: 库前缀,除了windows平台,都是这个前缀

boost_regex: boost的regex库

-mt 多线程支持

-d debug版本

LinuxC++编写线程安全库dll的方法:

1、动态库只有一个导出函数

这种情况下编写函数时,只需要考虑不要有冲突的全局数据就可以了。这里的全局数据包括了在堆中分配的数据块和静态全局变量等。如果存在这样的全局数据,那么进程中的不同线程访问这个函数就会造成冲突。

2、动态库导出了多个函数,而且多个函数间存在数据传递。

一般DLL都导出多个函数,一个初始化,一个资源释放,其他为核心功能函数。这些函数间极有可能发生数据传递。如果一个初始化函数是在线程A中调用的,而核心功能函数是在线程B中调用的,那么线程A初始化函数的资源就无法对应线程B中的核心功能,此外还有核心功能函数间的数据传递,这样的DLL就不是线程安全的,必然导致错误。

解决办法是由用户(即使用DLL的人)保证这些导出函数是在一个线程中调用。但这样会很大程度上限制接口的设计和用户的使用自由度。所以最好的方法是函数只管自己的线程安全,不同函数传递数据用动态TLS,线程局部存储。

3、限制访问DLL中某一函数的线程数目。

对于DLL中的某一个函数的访问线程数目是有限制的,超过了限制其他线程就得等一定的时间,一定的时间过后如果还不能得到执行机会,那就返回超时。这样的设计对用户来说是友好的,而且很实用,有的商业程序确实是按照允许用户访问的通道数目来计价的。

对DLL中的函数做这样的一个封装,一般是简单的待用Semaphore信号量,来解决。DLL初始化时调用CreateSemaphore函数对信号量进行初始化,其原型如下:

HANDLE CreateSemaphore(

LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,

// pointer to security attributes

LONG lInitialCount, // initial count

LONG lMaximumCount, // maximum count

LPCTSTR lpName // pointer to semaphore-object name

)

对于信号量,它每WaitForSingleObject一次(当然是要进入),其状态值(一个整数)就减1,使用完ReleaseSemaphore其状态值就加1,当其状态值为0时信号量就由有信号变为无信号。利用信号量的这一特性,我们在初始化时将信号量的初始值(第2个参数)设置为限制的线程访问数目。在要限制访问线程数目的函数内部,通过调用WaitForSingleOject获取控制权,并指定一个等待时间(这个由配置文件指定),根据情况超时返回,使用完ReleaseSemaphore释放对占用,让其他线程可以调用这个函数。

4、多进程情况下的多线程安全DLL。

LL是可以被多个进行加载并调用的。那就是说如果我们只对一个进程进行了限制,那么在多进程调用的情况下,这样的限制被轻易攻破。

我们都知道,Semaphore信号量属于内核对象,也就是说其可以被多进程共享访问,也就说,如果我们给一个Semaphore指定了一个名字,在另一个进程中,我们只要调用OpenSemaphore函数用同一名字打开信号量就可以访问了。这样问题就解决了?

现实情况是,多进程情况下,一般不是简单的多进程共享一个Semaphore就可以了。多进程间需要互通很多信息。一般的解决办法是,采用共享数据段。

#pragma data_seg("share")

int share_data

#pragma data_seg()

#pragma comment(linker,"/SECTION:share, RWS")

通过pragam编译器指令生成了一个名叫share的共享数据段,这样对于变量share_data就可以多进程共享的了。如果要多进程间交换数据,只要在data_seg中添加数据定义即可。

安装步骤:

●安装mysql

# tar zxvf mysql-4.0.14.tar.gz -C /setup

# cd /setup/mysql-4.0.14

# groupadd mysql

# useradd mysql -g mysql -M -s /bin/false

# ./configure --prefix=/web/mysql \ 指定安装目录

--without-debug \去除debug模式

--with-extra-charsets=gb2312 \添加gb2312中文字符支持

--enable-assembler \使用一些字符函数的汇编版本

--without-isam \去掉isam表类型支持 现在很少用了 isam表是一种依赖平台的表

--without-innodb \去掉innodb表支持 innodb是一种支持事务处理的表,适合企业级应用

--with-pthread \强制使用pthread库(posix线程库)

--enable-thread-safe-client \以线程方式编译客户端

--with-client-ldflags=-all-static \

--with-mysqld-ldflags=-all-static \以纯静态方式编译服务端和客户端

# make

# make install

# scripts/mysql_install_db \生成mysql用户数据库和表文件

# cp support-files/my-medium.cnf /etc/my.cnf \copy配置文件,有large,medium,small三个环境下的,根据机器性能选择,如果负荷比较大,可修改里面的一些变量的内存使用值

# cp support-files/mysql.server /etc/init.d/mysqld \copy启动的mysqld文件

# chmod 700 /etc/init.d/mysqld

# cd /web

# chmod 750 mysql -R

# chgrp mysql mysql -R

# chown mysql mysql/var -R

# cd /web/mysql/libexec

# cp mysqld mysqld.old

# strip mysqld

# chkconfig --add mysqld

# chkconfig --level 345 mysqld on

# service mysqld start

# netstat -atln

看看有没有3306的端口打开,如果mysqld不能启动,看看/web/mysql/var下的出错日志,一般都是目录权限没有设置好的问题

# ln -s /web/mysql/bin/mysql /sbin/mysql

# ln -s /web/mysql/bin/mysqladmin /sbin/mysqladmin

# mysqladmin -uroot password "youpassword" #设置root帐户的密码

# mysql -uroot -p

# 输入你设置的密码

mysql>use mysql

mysql>delete from user where password=""#删除用于本机匿名连接的空密码帐号

mysql>flush privileges

mysql>quit

以下是mysql的学习命令:

●mysql常见的一些有用的选项和命令

mysqld -----开启日志支持

--log

--log-update

--log-long-formart

●mysql

grant all on database.* to user identified by "password" 新建一user用户,赋予其database数据库的所有权限

revoke all on database from user 移除user用户在database数据库上的所有权限

mysql -uroot -p --one-database databasename <file.sql 从file.sql文件导入sql语句到databasename这个数据库里

●mysqladmin

mysqladmin flush-logs 命令mysqld重新打开一个新的日志文件,就是清空老日志文件,相当于轮回了

●mysqldump

--add-drop-table 导出sql语句时添加droptable if exists语句

--quick 快速导出

--opt 优化选项(推荐)

●myisamchk

检查表选项

--extend-check 扩展检查

--medium-check 速度比较折中的一个检查选项

修复表选项

--recover 修复表文件

--safe-recover 安全修复表文件,比--recover要慢

修饰修复表项

--force 强制清除上次的临时文件

--quick 只根据素引文件的内容进行修复

●mysql的管理

可以使用phpmyadmin(需要php的环境支持)和mysqlcc(linux图形界面支持,WINDOWS系统支持)

希望以上的回答能帮你一下。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7517671.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-06
下一篇2023-04-06

发表评论

登录后才能评论

评论列表(0条)

    保存