Ubuntu:常用的需要进行多版本管理的库:eigen3/protoc/gcc


一 eigen3的双版本管理

首先,通过

sudo apt-get install libeigen

来安装的eigen3,默认安装在/usr/include下,查看此处的版本可用:

gedit /usr/include/eigen3/Eigen/src/Core/util/Macros.h

而通过源码安装,即在官方源码地址:http://eigen.tuxfamily.org/index.php?title=Main_Page

下载,然后解压,cd进解压后的文件夹,执行:

mkdir build

cd build

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/include/eigen3 ..

make

sudo make install

将会安装在/usr/local/inculde下 ,当然,也可以通过指定DCMAKE_INSTALL_PREFIX=/usr/include/eigen3 来安装在/usr/include目录下


如何进行双版本管理呢,以在/usr/include下进行版本为例(这样更加方便,不需要在cmakelist里指定eigen3的搜索路径)

首先,查看当前/usr/include/eigen3中的eigen3版本,发现:

#ifndef EIGEN_MACROS_H

#define EIGEN_MACROS_H

#define EIGEN_WORLD_VERSION 3

#define EIGEN_MAJOR_VERSION 3

#define EIGEN_MINOR_VERSION 7

也即,其版本为337

所以在/usr/include目录下:

sudo mkdir eigen337

然后,选择准备安装的第二个版本,例如eigen316,在同一目录下:

sudo mkdir eigen316

下载eigen316源码压缩包,压缩,然后在编译时制定安装位置为:

cmake -DCMAKE_INSTALL_PREFIX=/usr/include/eigen316/eigen3

其他不变


这样,当我们想使用eigen316版本时:

移入
sudo mv eigen3 eigen337    

移出

sudo mv eigen316/eigen3 .

也就是,把当前eigen3中的内容移到eigen337中保存,然后把eigen316中的内容移出至/usr/include


特别的,在进行这样的操作之后,有时会出现在cmakelist中include 然后编译时依然报错版本不对

这是因为,cmake会第一时间先去以下文件夹:/usr/lib/cmake,找eigen库对应的:EigenConfig.cmake,而这里面的版本没有被修改

解决方式也简单,直接把/usr/lib/cmake下的eigen文件夹删除即可(cmake依然可以找到eigen库)


二 protoc

首先用:

protoc --version

可以查看当前电脑上的protoc版本,例如查得当前版本为protobuf3.6.0

为了与后面的proto另一版本区别,建立软链接:

sudo ln /usr/local/bin/protoc /usr/local/bin/protoc3.6

sudo rm -rf pprotoc  # 删除protoc的软链接

protoc3.6  --version  # 通过新创建的软链接查看protoc版本

以后,就用protoc3.6 --version来查看protoc版本


现在安装第二版protoc:
下载地址:Protocol Buffers v3.6.0。例如选择的是protobuf2.6;

解压缩protobuf-all-2.6.0.tar.gz并移动到合适的文件夹,然后:

tar -zxvf protobuf-all-2.6.0.tar.gz

sudo cp -rf protobuf-2.6.0 /usr/local

cd /usr/local

sudo chmod -R 0777 protobuf-3.6.0


然后安装:


cd protobuf-2.6.0

./autogen.sh

./configure  --prefix=/usr/protobuf  # 为了与protobuf-3.6.0分开来,设定配置目录

make

make check

sudo make install

然后创建软连接:

sudo ln -s /usr/protobuf/bin/protoc /usr/local/bin/protoc2.6

现在即可用protoc2.6 --version来查看protoc第二个版本


如何使用呢,我们现在来到/usr/local/bin目录

发现里面会有:protoc,protoc2.6,protoc3.6三个软连接。

如果现在准备使用2.6版本在目录下:

sudo rm protoc

sudo ln /usr/local/bin/protoc2.6 /usr/local/bin/protoc

这时,用protoc --version 显示的就是2.6版了,如果想用3.6版本也是同样操作


三 gcc

一个小问题,有时会有这样的报错:unsupported GNU version! gcc versions later than 6 are not supported!

实际上是CUDA9.1不支持高版本的gcc,而你本机上就是高版本的gcc

解决方法:

sudo update-alternatives --install/usr/bin/g++ g++ /usr/bin/g++-6 10

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 10

即可切换至gcc6  后面的10是优先级,也就是说如果想切换回gcc7:

sudo update-alternatives --install/usr/bin/g++ g++ /usr/bin/g++-7 11

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 11

最好将优先级增大一点,以此类推

设置后,用gcc --verison查看当前版本

你可能感兴趣的:(Ubuntu:常用的需要进行多版本管理的库:eigen3/protoc/gcc)