我该如何处理gcc-4.9和gcc-5之间的ABI不兼容?

时间:2016-05-10 16:57:42

标签: c++ linux gcc abi

我最近将我的开发机器升级到Ubuntu 16.04

gcc的默认版本为gcc-5.3.1

我遇到的问题是供应商提供的库只使用gcc-4.9构建,它与gcc-5不兼容。

我已经要求供应商提供该库的新版本,但这种情况不太可能很快发生。

与此同时,我从Ubuntu的软件包回购中安装了gcc-4.9.3

我现在安装了gcc-4.9和gcc-5:

ls -l /usr/bin/gcc*
lrwxrwxrwx 1 root root      5 May  9 11:49 /usr/bin/gcc -> gcc-5
-rwxr-xr-x 1 root root 838008 Apr 13 23:23 /usr/bin/gcc-4.9
-rwxr-xr-x 1 root root 915704 Apr 13 11:29 /usr/bin/gcc-5

我尝试使用gcc-4.9构建我们的源代码,但现在我遇到了相同的ABI问题,但是反过来。

我遇到的问题是我们通常会从发行版软件包中安装一堆依赖项

sudo apt-get install \
    python-dev \
    libbz2-dev \
    libboost-all-dev \
    libprotobuf-dev \
    libgoogle-perftools-dev \
    postgresql \
    libpqxx-dev

虽然我可以将我的构建配置为使用gcc-4.9

mkdir build && cd build
CC=/usr/bin/gcc-4.9 CXX=/usr/bin/g++-4.9 cmake ..
make -j8

我在链接libtcmalloc_minimal.alibprotobuf.a

时遇到链接器错误

因此,我尝试的下一步是删除从发行版repos安装的所有依赖项,并开始从源代码构建依赖项。

CC=/usr/bin/gcc-4.9 CXX=/usr/bin/g++-4.9 ./configure
make -j8
sudo make install

这里的问题是我开始走向一个兔子洞。每个依赖项都有其他依赖项,我不确定它将在何处结束。

另一种选择是降级回Ubuntu 14.04或某些随gcc-4.9而非gcc-5一起发布的版本。

在我尝试这个thurmonuclear选项之前,我想知道是否有更好的方法来做到这一点?

也许可以从使用gcc-4.9构建的repos或其他方式安装?

0 个答案:

没有答案