【发布时间】:2019-05-04 16:34:27
【问题描述】:
首先,要知道我对 c++ 和 Ubuntu 很陌生。
我有一个程序,我正在尝试使用 GCC(我的版本是 gcc 4.8.4)通过 makefile 进行编译。 问题是可执行文件是在它工作的目录下创建的,但是当它复制到任何其他目录时(甚至强制在makefile上创建)它会说。
/usr/lib/i386-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.20' not found
当我检查带有字符串的版本时 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX,我得到:
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_DEBUG_MESSAGE_LENGTH
据我一直在互联网上阅读,问题是 GLIBCXX_3.4.20 仅在我使用 4.8.4 时受 gcc 4.9 及更高版本支持,但我仍然不明白为什么它会在特定目录而不是其他目录。
gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.4)
由于我没有更新 gcc 的权限,我想知道我能做些什么来解决这个问题... 我应该避免在需要 GLIBCXX_3.4.20 的代码上使用哪些东西? 我可以强制编译器以某种方式使用该库的旧版本或在二进制文件中包含该特定库吗? (如果我没有所需的库,我不明白为什么它会在目录中工作)
提前感谢,如果我的问题很愚蠢或没有意义,我很抱歉,因为我说过我对这一切都很陌生。
【问题讨论】:
-
看来你的 32 位和 64 位版本有问题。
-
怀疑我们可以在无法看到系统或至少更多信息的情况下回答这个问题。你说它只在一个目录中有效,但不告诉我们那个目录是什么,它在哪里,或者里面有什么?
-
系统是64位的,目录是通用目录,二进制文件是在我公司自动生成的。如果我按照人们用来移动可执行文件的方式执行 ls 命令,那么该目录上就没有更多内容了。
-
我一直在尝试对代码的所有部分进行注释和取消注释,我得到的答案是函数 string.find() 是给我带来麻烦的那个。尝试将所有 find() 更改为 strstr 和 strchar 并且问题在我告诉的目录上有效,但在外部运行时仍然存在问题...