gpt4 book ai didi

c++ - 使用自定义构建的 gcc 时程序链接失败

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:48 24 4
gpt4 key购买 nike

我正在运行一个 fedora 21 发行版,其中默认的 gcc 是 4.9。我在/usr/local/gcc48 中有一个自定义构建的 gcc/g++ 4.8(例如,cuda 需要 gcc =< 4.8,我使用 update-alternatives 来选择这个)到目前为止,我一直在用这个 4.8 版编译一些小程序,没有问题。

现在,我获得了使用 vtk 库和其他库的源代码。如果我使用默认的 gcc 4.9,cmake 和 make 可以正常工作。但是,当使用 gcc48 时,我得到:

/usr/lib64/vtk/libvtkCommonDataModel.so.1: référence indéfinie vers « std::__throw_out_of_range_fmt(char const*, ...)@GLIBCXX_3.4.20 »
/lib64/libicuuc.so.52: référence indéfinie vers « __cxa_throw_bad_array_new_length@CXXABI_1.3.8 »
collect2: erreur: ld a retourné 1 code d'état d'exécution
CMakeFiles/main.dir/build.make:365: recipe for target '../bin/main' failed
make[2]: *** [../bin/main] Error 1
CMakeFiles/Makefile2:60: recipe for target 'CMakeFiles/main.dir/all' failed
make[1]: *** [CMakeFiles/main.dir/all] Error 2
Makefile:76: recipe for target 'all' failed
make: *** [all] Error 2

我知道这是一个链接器错误,我试图指向 LD_LIBRARY_PATH=/usr/local/gcc48/lib 或 LD_LIBRARY_PATH=/usr/local/gcc48/lib64,但我卡住了。

这里有什么问题?

谢谢

最佳答案

__cxa_throw_bad_array_new_length 已添加到 GCC 4.9 中。这就是 @CXXABI_1.3.8 版本后缀的含义。您可以在此处查找这些版本代码: https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html

此错误意味着您正在尝试链接由 GCC 4.9 或更高版本编译的目标文件 /usr/lib64/vtk/libvtkCommonDataModel.so.1libstdc++.so 或来自 GCC 4.8 或更早版本的 libsupc++.so。用 GCC 4.8 重建 libvtkCommonDataModel.so,或者链接到正确的 libstdc++.so。

编辑:实际上,如果您想使用较新版本的 GCC 进行编译但使用较旧的 libstdc++ 运行。那么,这是可以做到的。

  1. 如果您想使用 GCC 5+ 编译并使用旧版 GCC 中的 libstdc++.so 运行,请使用 -D_GLIBCXX_USE_CXX11_ABI=0 进行编译。参见 https://bugzilla.mozilla.org/show_bug.cgi?id=1153109Using dual ABI在 libstdc++ 手册中。

  2. 针对 stdc++compat.cpp 的链接包含来自 Mozilla 的反向兼容黑客。你也可以看看我的modified version它不依赖于任何 Mozilla header ,但它有点过时了。特别是,这定义了一个 stub __cxa_throw_bad_array_new_length

关于c++ - 使用自定义构建的 gcc 时程序链接失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29230777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com