centos pthread库(linux安装pthread库)

centos安装ffmpeg添加ogg音频ffmpeg音频编码支持操作步骤

简单介绍

FFmpeg是一个自由软件,可以运行音频和视频多种格式的录影、转换、流功能[1],包含了libavcodec─这是一个用于多个项目中音频和视频的解码器库,以及libavformat——一个音频与视频格式转换库。(来自维基百科)

安装前提

由于在centos下使用 yum install ffmpeg是找不到安装包的,所以需要通过其他方法来安装:

一、安装ffmpeg

操作系统:centos 5.6

(一)安装编译环境

复制代码代码如下:

#yum install-y automake autoconf libtool gcc gcc-c++

(二)安装所需程序库的RPM包到 centos(因为centos自带的库中没有ffmpeg包,这里相当于是扩展)

复制代码代码如下:

#rpm-Uhv

(三)安装 Install ffmpeg等模块

复制代码代码如下:

yum-y install ffmpeg ffmpeg-devel

当然你也可以选择编译源码安装,只需要在安装之前,将 ffmpeg需要的支持库安装好就是了,我之所以选择这种安装方式就是不想再去逐个编译各种库。

安装好之后可以使用下面命令查看:

复制代码代码如下:

./configure--prefix=/usr

安装好之后,你的机器就添加了对 ogg音频的支持。这里你需要先安装 libogg,因为 libvorbis需要 libogg的支持。

重新编译 ffmpeg

接下来就需要重新编译安装一下 ffmpeg,这时候你需要去下载一个 ffmpeg的源码包

运行

复制代码代码如下:

ffmpeg

拷贝如下信息

复制代码代码如下:

configuration:--prefix=/usr--libdir=/usr/lib64--shlibdir=/usr/lib64--mandir=/usr/share/man--incdir=/usr/include--disable-avisynth--extra-cflags='-O2-g-pipe-Wall-Wp,-D_FORTIFY_SOURCE=2-fexceptions-fstack-protector--param=ssp-buffer-size=4-m64-mtune=generic-fPIC'--enable-avfilter--enable-libdirac--enable-libfaac--enable-libfaad--enable-libfaadbin--enable-libgsm--enable-libmp3lame--enable-libopencore-amrnb--enable-libopencore-amrwb--enable-libx264--enable-gpl--enable-nonfree--enable-postproc--enable-pthreads--enable-shared--enable-swscale--enable-vdpau--enable-version3--enable-x11grab

当然你可以将不需要的移除,

在 ffmpeg源码目录下运行

复制代码代码如下:

./configure--prefix=/usr--libdir=/usr/lib64--shlibdir=/usr/lib64--mandir=/usr/share/man--incdir=/usr/include--disable-avisynth--extra-cflags='-O2-g-pipe-Wall-Wp,-D_FORTIFY_SOURCE=2-fexceptions-fstack-protector--param=ssp-buffer-size=4-m64-mtune=generic-fPIC'--enable-avfilter--enable-libdirac--enable-libfaac--enable-libfaad--enable-libfaadbin--enable-libgsm--enable-libmp3lame--enable-libopencore-amrnb--enable-libopencore-amrwb--enable-libx264--enable-gpl--enable-nonfree--enable-postproc--enable-pthreads--enable-shared--enable-swscale--enable-vdpau--enable-version3--enable-x11grab--enable-libvorbis

最后的一项是--enable-libvorbis,这个就是加入 ogg的音频支持。

编译完成之后,运行

复制代码代码如下:

make&& make install

就完成 ffmpeg的安装了

简单测试

可以使用如下命令测试 amr到 ogg的转码:

复制代码代码如下:

ffmpeg-i xxx.amr-f ogg-acodec libvorbis-ac 2-ab 128k-ar 44100 xxx.ogg

可以使用如下命令测试 amr到 mp3的转码:

复制代码代码如下:

ffmpeg-i xxx.amr xxx.mp3

可见 ffmpeg对 mp3的支持还是好很多的。

转码成功可以看到类似下面的输出:

gcc编译选项-lpthread和-pthread的区别

遇到编译问题,发现使用相同代码与编译命令在不同环境(CentOS与Ubuntu)下执行结果不同。异常发生于调用std::call_once函数。问题描述如下:

在CentOS 7.0+ gcc4.8.0下编译执行正常,但在Ubuntu 18.04+ gcc7.4.0下编译执行出错,异常信息为:main thread begin...... terminate called after throwing an instance of'std::system_error' what(): Unknown error-1 Aborted(core dumped)。

通过单步调试,发现异常起因于调用std::call_once。为解决此问题,将编译命令中的-lpthread修改为-pthread,程序得以正常执行。

探究-lpthread与-pthread的区别,发现-lpthread为较老式解决方法,而pthread新增了对宏D_REENTRANT的定义。-pthread展开为“-D_REENTRANT-lpthread”,不仅能链接pthread库,还能打开系统头文件中的各种多线程支持分支,如errno错误码标志。定义_REENTRANT可实现每线程独有errno,避免线程竞争错误。-pthread在移植性方面更为强大,尤其在不同Unix变种中,如FreeBSD,不会遇到链接问题。尽管-pthread未被接纳为C标准,但已成为事实标准,建议使用。

综上所述,为确保代码在不同环境下的稳定性和兼容性,建议在编译时使用-pthread选项。

如何在ubuntu上装freesurfer

1.从网上下载软件压缩包

在终端中使用如下命令:

ftp surfer.nmr.mgh.harvard.edu

用户名:anonymous;密码:空,即直接回车

cd pub/dist/freesurfer/4.5.0

dir

get freesurfer-Linux-centos4-stable-pub-v4.5.0-full.tar.gz

大约需要18个小时能下载完。

2.把文件移到需要安装的目录下,并解压缩,如放到/usr/local

mv freesurfer-Linux-centos4-stable-pub-v4.5.0-full.tar.gz/usr/local

tar zxvf freesurfer-Linux-centos4-stable-pub-v4.5.0-full.tar.gz

3.安装tcsh

apt-get tcsh

4.配置环境变量

export FREESURFER_HOME=/usr/local/freesurfer

编辑~/.bashrc文件,在最后添加下面两个语句:

export FREESURFER_HOME=/usr/local/freesurfer

source$FREESURFER_HOME/SetUpFreeSurfer.sh

5.基本安装

在终端运行如下命令:

export FREESURFER_HOME=<freesurfer_installation_directory>/freesurfer

source$FREESURFER_HOME/SetUpFreeSurfer.sh

此时,终端上会打印如下信息:

Setting up environment for FreeSurfer/FS-FAST(and FSL)

FREESURFER_HOME/usr/local/freesurfer

FSFAST_HOME/usr/local/freesurfer/fsfast

FSF_OUTPUT_FORMAT nii

SUBJECTS_DIR/usr/local/freesurfer/subjects

MNI_DIR/usr/local/freesurfer/mni

6.将.license文件复制到$FREESURFER_HOME目录下

将进行注册的时候,收到的邮件中的#---------------CUT HERE---------------之间的三行复制到一个文件中,并命名为.license文件

将.license文件复制到安装目录下的freesurfer文件中

7.安装其他库文件

cd bin

ldd tksurfer.bin

此时,会在终端打印如下信息:

linux-gate.so.1=>(0xb7f5a000)

libtix8.1.8.4.so=> not found(Tix8.4 ln-s)

libtk8.4.so=> not found(TK8.4)

libtcl8.4.so=>/usr/lib/libtcl8.4.so(0xb7e95000)或者是 not found

libGLU.so.1=>/usr/lib/libGLU.so.1(0xb7e12000)

libXmu.so.6=>/usr/lib/libXmu.so.6(0xb7dfc000)

libGL.so.1=>/usr/lib/libGL.so.1(0xb7d58000)

libXext.so.6=>/usr/lib/libXext.so.6(0xb7d4a000)

libX11.so.6=>/usr/lib/libX11.so.6(0xb7c63000)

libz.so.1=>/usr/lib/libz.so.1(0xb7c4d000)

libcrypt.so.1=>/lib/tls/i686/cmov/libcrypt.so.1(0xb7c1b000)

libdl.so.2=>/lib/tls/i686/cmov/libdl.so.2(0xb7c17000)

libpthread.so.0=>/lib/tls/i686/cmov/libpthread.so.0(0xb7bff000)

libstdc++.so.6=>/usr/lib/libstdc++.so.6(0xb7b0c000)

libm.so.6=>/lib/tls/i686/cmov/libm.so.6(0xb7ae7000)

libgcc_s.so.1=>/lib/libgcc_s.so.1(0xb7adb000)

libc.so.6=>/lib/tls/i686/cmov/libc.so.6(0xb798c000)

libXt.so.6=>/usr/lib/libXt.so.6(0xb793b000)

libSM.so.6=>/usr/lib/libSM.so.6(0xb7933000)

libICE.so.6=>/usr/lib/libICE.so.6(0xb791b000)

libGLcore.so.1=>/usr/lib/libGLcore.so.1(0xb6e05000)

libnvidia-tls.so.1=>/usr/lib/tls/libnvidia-tls.so.1(0xb6e03000)

libXau.so.6=>/usr/lib/libXau.so.6(0xb6e00000)

libxcb-xlib.so.0=>/usr/lib/libxcb-xlib.so.0(0xb6dfe000)

libxcb.so.1=>/usr/lib/libxcb.so.1(0xb6de6000)

/lib/ld-linux.so.2(0xb7f5b000)

libXdmcp.so.6=>/usr/lib/libXdmcp.so.6(0xb6de0000)

这样就完成了基本的安装,但是由于是Ubuntu环境,所以在测试的时候运行qdec会提示如下错误信息:

qdec.bin: error while loading shared libraries: libtiff.so.3: cannot open shared object file: No such file or directory

8.解决上面出现的问题

寻找到libtiff.so.4所在路径,然后建立libtiff.o.3和libtiff.so.4之间的软连接即可。

find/-name libtiff.so.4-print

ln-s/usr/lib/libtiff.so.4/usr/lib/libtiff.so.3

9.测试软件是否安装成功

recon-all--help

会打印出一些关于软件的信息

tkmedit bert orig.mgz

tkmedit bert norm.mgz-segmentation aseg.mgz$FREESURFER_HOME/FreeSurferColorLUT.tx

tksurfer bert rh pial

qdec

逐个运行上面的命令都会打开相应软件的界面

recon-all-s bert-autorecon1

会运行大概半个小时,如果没有什么问题说明软件安装成功了。

阅读剩余
THE END