我想在 Code::Blocks C++ 项目中使用 GiNaC 库,但在项目构建过程中遇到以下错误:
../../ginac/lib/libginac.so: undefined reference to `std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::basic_ostringstream()@GLIBCXX_3.4.26'
../../ginac/lib/libginac.so: undefined reference to `std::__throw_bad_array_new_length()@GLIBCXX_3.4.29'
collect2: error: ld returned 1 exit status
我认为这些错误与 g++ 编译器版本和 stdc++ 库版本之间的不兼容有关,但由于缺乏经验,我不知道如何解决这个问题。
由于我在集群上并且没有root权限,因此我使用以下命令将必要的先决条件库GMP-6.2.1和CLN-1.3.6以及GiNaC本身GiNaC-1.8.5安装到非-默认位置 PATH_TO_XXX,其中 XXX 分别是 GMP、CLN 和 GiNaC:
LDFLAGS="-lstdc++" ./configure --prefix=PATH_TO_XXX
make
make check
make install prefix=PATH_TO_XXX
对于 GMP
--enable-cxx
选项已添加到配置中。对于 CLN --with-gmp=PATH_TO_GMP
选项已添加到配置中。生成的构建日志在错误之前提供以下条目:
g++ -L../../ginac/lib -L../../ginac/cln/lib -L../../ginac/cln/gmp/lib -L../../../../../../../../lib64 -o bin/Release/LB_COL_jetInSquareDuct_solver obj/Release/Control.o obj/Release/GridCoupling.o obj/Release/Lattice.o obj/Release/main.o obj/Release/Node.o -O2 -s -lstdc++ -lcln -lgmp -lgmpxx /lib64/libstdc++.so.6 /lib64/libgomp.so.1 ../../ginac/lib/libginac.so ../../ginac/cln/lib/libcln.so ../../ginac/cln/gmp/lib/libgmp.so ../../ginac/cln/gmp/lib/libgmpxx.so
我能够解决这个问题。它只是由于在编译 GMP、CLN 和 GiNaC 库(使用 gcc 12.2.0 编译)和 Code::Blocks 项目本身(使用 gcc 7.1.0 编译)时使用不同的编译器版本而引起的,可以在项目设置中找到“设置 -> 编译器 -> 工具链可执行文件”。通过在其中添加具有正确版本的新编译器,它就会出现在项目构建选项中以供选择。
参考:https://groups.google.com/g/or-tools-discuss/c/d8W3urEp0wk 这解决了我的问题
斯图尔特·罗杰斯 2022 年 5 月 18 日,晚上 11:23:59 或工具讨论
$ strings /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_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_DEBUG_MESSAGE_LENGTH
Mizux 赛哈 2022 年 5 月 19 日 4:55:08 或工具讨论 对于 v9.3,我们尝试使用支持 C++20 的编译器(gcc 9+),不幸的是 r-toolchain 存储库也碰撞了 GLIBC(与 Centos 7 相反) 请参阅:https://github.com/google/or-tools/issues/3184#issuecomment-1072519303
您可以尝试提高编译器
add-apt-repository -y ppa:ubuntu-toolchain-r/test
apt install -yq gcc-11 g++-11
或者从源代码重建或工具。