我使用Visual Studio 2013在我的Windows计算机上编写了2个程序。它们运行良好并在我的计算机上完美运行,但当我将它们带到Linux机器上的学校帐户时,出现了一个问题。他们编译和1跑,但另一个没有。那个没跑的人给了我一个错误:
.../lib/compat/libstdc++.so.6: version CXXABI_1.3.2 required by...
我一直在做研究,我似乎无法找到我的程序中将使用libstdc ++的东西。所以,我甚至不确定它是什么或做什么。由于我在学生账户上,我不能使用sudo安装它,这是一个功课,所以我不能使用我自己的库提交它。
关于我的程序可能使用的任何想法都需要libstdc ++。so.6?
我有3个文件:main.cpp,LinkedList.cpp和LinkedList.h。
我认为它可能在main.cpp中,因为我认为它源于我所包含的库,而main.cpp是唯一使用外部库的库。以下是它使用的库列表:
#include <iomanip>
#include <stdio.h>
#include <fstream>
#include <ctype.h>
#include <string>
#include <iostream>
#include <vector>
#include <sstream>
#include <bitset>
#include <algorithm>
#include "LinkedList.h"
提前致谢!
答案 0 :(得分:0)
您正在尝试在另一个版本下运行与一个版本的库链接的程序。只要库版本不太远, 就可以正常工作。在您的情况下,库之间的差异太大了。
GCC(特别是C ++)最近发生了很大的变化,一些用于编译和运行良好的程序现在爆炸或根本不编译(由于语言变化,编译器错误接受破坏的代码,...... ),图书馆ABI也发生了变化。你最好的选择是携带源代码,并确保你在两端都有兼容的语言版本。如果这不方便,解决方案是确保在两个地方都有相同的编译器(和其他环境)。最简单的方法是安装相同的发行版和版本。
答案 1 :(得分:0)
首先,你不能删除libstdc ++。so.6的依赖关系,因为它是一个标准的C ++库。 要解决您的问题,您必须检查您的libstdc ++。是否具有正确的版本
strings /usr/lib64/libstdc++.so.6|grep GXXABI_1.3.1
如果没有匹配版本,您将拥有以下两种方法:
在您学校的Linux操作系统上更新您的gcc
yum intsall gcc
下载一个匹配的libstdc ++。所以从这个网站: download gcc || download matching libstdc++ 然后将libstdc ++替换为/ usr / lib64 / libstdc ++。so.6。*
答案 2 :(得分:0)
我经历了几个步骤来找到我的解决方案。最初我可以编译我的程序但无法运行它。
1)解决问题的第一步是改变我的编译方法。最初我使用以下代码编译了我的程序:g++ main.cpp LinkedList.cpp -o output
。我将其更改为:g++ -static main.cpp LinkedList.cpp -o output
,这允许我编译并运行。这工作但静态是一种动态链接库的方法。这可以防止与共享库链接。这不是一个好的解决方案,因为它需要更长的时间并增加可执行文件的文件大小,所以我想改进。
2)我做的第二件事是删除using namespace std
。是的,我欺骗并使用它。所以我浏览了我的程序并将std::
添加到适当的位置。
3)我做的最后一件事是清理我的代码。我使用了很多库,因为我的程序是一个庞大而复杂的程序。我使用的是我在原帖中列出的所有库。我浏览了我的代码,无论我在使用库中的函数的任何地方,我都会尝试编写自己的代码来执行相同的操作,这会导致我的程序不依赖于这些库。我能够用我自己的函数复制相当数量的这些依赖的外部函数,这增加了许多代码,但它允许我删除其中的一些包括。我的包含列表现在是:
#include <fstream>
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
#include "LinkedList.h"
#include <math.h>
我不确定哪个步骤解决了我的问题,但现在我可以使用我的首选方法g++ main.cpp LinkedList.cpp -o output
进行编译,并且我的程序运行良好。
我希望这有助于某人。