C++ libc++;abi未定义符号:_ZTVN10_cxxabiv120_si_class_type_infoE

C++ libc++;abi未定义符号:_ZTVN10_cxxabiv120_si_class_type_infoE,c++,linux,linker-errors,libc++,ubuntu-18.04,C++,Linux,Linker Errors,Libc++,Ubuntu 18.04,我正在运行Ubuntu18.04.1 LTS,我正在尝试让Half Life的游戏库在Xash3D引擎中运行。它们的构建正常,但当我尝试运行引擎时,会出现以下令人困惑的错误: undefined symbol: _ZTVN10__cxxabiv120__si_class_type_infoE 经过一点互联网研究,我认为这基本上解决了“VTable for\uuuucxxabiv1::\uuuu si\u class\u type\u info”。我已经安装了libc++abi-dev、libc

我正在运行Ubuntu18.04.1 LTS,我正在尝试让Half Life的游戏库在Xash3D引擎中运行。它们的构建正常,但当我尝试运行引擎时,会出现以下令人困惑的错误:

undefined symbol: _ZTVN10__cxxabiv120__si_class_type_infoE
经过一点互联网研究,我认为这基本上解决了“VTable for
\uuuucxxabiv1::\uuuu si\u class\u type\u info
”。我已经安装了
libc++abi-dev
libc++-dev
libc++abi1
libc++1
,以及它们的i386版本(因为我必须以32位编译),所以我不知道运行时链接为什么会失败

如果有帮助的话,我发现《半衰期报告》中的其他库(特别是《死亡竞赛》经典库)也可以工作。我检查了makefiles,DMC库没有设置任何
LDFLAGS
,而标准半衰期库使用:

LDFLAGS= -lm -lstdc++
我为什么会在这里出现链接器错误?我能做些什么来修复它们

编辑:我正在使用GCC/G++7.3.0。如果有帮助,我正在使用的库的makefile如下所示:

有效的方法是:

一个没有:

我还在编译时生成的
*\u map.txt
文件中搜索“libc”。这就是现在的情况:

在工作DMC映射文件中:

Archive member included to satisfy reference by file (symbol)

/usr/lib/i386-linux-gnu/libc_nonshared.a(stack_chk_fail_local.oS)
                              /home/vesper/Documents/afterburner-game/build/game/obj/dmcdll/animating.o (__stack_chk_fail_local)

As-needed library included to satisfy reference by file (symbol)

libstdc++.so.6                /home/vesper/Documents/afterburner-game/build/game/obj/dmcdll/nodes.o (operator new[](unsigned int)@@GLIBCXX_3.4)
libpthread.so.0               /usr/lib/gcc/x86_64-linux-gnu/7/32/libstdc++.so (write@@GLIBC_2.0)
libc.so.6                     /home/vesper/Documents/afterburner-game/build/game/obj/dmcdll/client.o (strcpy@@GLIBC_2.0)
/home/vesper/Documents/afterburner-game/build/game/obj/dmcdll/triggers.o: dynamic relocation against `CTriggerPush::CTriggerPush()' in read-only section `.text._Z11GetClassPtrI12CTriggerPushEPT_S2_[_Z11GetClassPtrI12CTriggerPushEPT_S2_]'

Discarded input sections

...

 .group         0x0000000000000000        0x8 /usr/lib/i386-linux-gnu/libc_nonshared.a(stack_chk_fail_local.oS)
 .text.__x86.get_pc_thunk.bx
                0x0000000000000000        0x4 /usr/lib/i386-linux-gnu/libc_nonshared.a(stack_chk_fail_local.oS)
 .note.GNU-stack
                0x0000000000000000        0x0 /usr/lib/i386-linux-gnu/libc_nonshared.a(stack_chk_fail_local.oS)

Linker script and memory map

LOAD /usr/lib/gcc/x86_64-linux-gnu/7/../../../i386-linux-gnu/crti.o
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/crtbeginS.o

... [Game object files] ...

LOAD /usr/lib/gcc/x86_64-linux-gnu/7/../../../i386-linux-gnu/libdl.so
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/../../../i386-linux-gnu/libpthread.so
START GROUP
LOAD /lib/i386-linux-gnu/libpthread.so.0
LOAD /usr/lib/i386-linux-gnu/libpthread_nonshared.a
END GROUP
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/../../../i386-linux-gnu/libc++abi.so
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc.a
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc_s.so
START GROUP
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc_s.so.1
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc.a
END GROUP
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/../../../i386-linux-gnu/libc.so
START GROUP
LOAD /lib/i386-linux-gnu/libc.so.6
LOAD /usr/lib/i386-linux-gnu/libc_nonshared.a
LOAD /lib/i386-linux-gnu/ld-linux.so.2
END GROUP
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc.a
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc_s.so
START GROUP
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc_s.so.1
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc.a
END GROUP
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/crtendS.o
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/../../../i386-linux-gnu/crtn.o
Archive member included to satisfy reference by file (symbol)

/usr/lib/i386-linux-gnu/libc_nonshared.a(stack_chk_fail_local.oS)
                              /home/vesper/Documents/afterburner-game/build/game/obj/hldll/aflock.o (__stack_chk_fail_local)

As-needed library included to satisfy reference by file (symbol)

libc.so.6                     /home/vesper/Documents/afterburner-game/build/game/obj/hldll/client.o (strcpy@@GLIBC_2.0)
/home/vesper/Documents/afterburner-game/build/game/obj/hldll/egon.o: dynamic relocation against `CEgon::UpdateEffect(Vector const&, Vector const&, float)' in read-only section `.text'

...

Linker script and memory map

LOAD /usr/lib/gcc/x86_64-linux-gnu/7/../../../i386-linux-gnu/crti.o
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/crtbeginS.o

... [Game object files] ...

LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc.a
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc_s.so
START GROUP
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc_s.so.1
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc.a
END GROUP
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/../../../i386-linux-gnu/libc.so
START GROUP
LOAD /lib/i386-linux-gnu/libc.so.6
LOAD /usr/lib/i386-linux-gnu/libc_nonshared.a
LOAD /lib/i386-linux-gnu/ld-linux.so.2
END GROUP
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc.a
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc_s.so
START GROUP
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc_s.so.1
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc.a
END GROUP
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/crtendS.o
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/../../../i386-linux-gnu/crtn.o
在非工作HL映射文件中:

Archive member included to satisfy reference by file (symbol)

/usr/lib/i386-linux-gnu/libc_nonshared.a(stack_chk_fail_local.oS)
                              /home/vesper/Documents/afterburner-game/build/game/obj/dmcdll/animating.o (__stack_chk_fail_local)

As-needed library included to satisfy reference by file (symbol)

libstdc++.so.6                /home/vesper/Documents/afterburner-game/build/game/obj/dmcdll/nodes.o (operator new[](unsigned int)@@GLIBCXX_3.4)
libpthread.so.0               /usr/lib/gcc/x86_64-linux-gnu/7/32/libstdc++.so (write@@GLIBC_2.0)
libc.so.6                     /home/vesper/Documents/afterburner-game/build/game/obj/dmcdll/client.o (strcpy@@GLIBC_2.0)
/home/vesper/Documents/afterburner-game/build/game/obj/dmcdll/triggers.o: dynamic relocation against `CTriggerPush::CTriggerPush()' in read-only section `.text._Z11GetClassPtrI12CTriggerPushEPT_S2_[_Z11GetClassPtrI12CTriggerPushEPT_S2_]'

Discarded input sections

...

 .group         0x0000000000000000        0x8 /usr/lib/i386-linux-gnu/libc_nonshared.a(stack_chk_fail_local.oS)
 .text.__x86.get_pc_thunk.bx
                0x0000000000000000        0x4 /usr/lib/i386-linux-gnu/libc_nonshared.a(stack_chk_fail_local.oS)
 .note.GNU-stack
                0x0000000000000000        0x0 /usr/lib/i386-linux-gnu/libc_nonshared.a(stack_chk_fail_local.oS)

Linker script and memory map

LOAD /usr/lib/gcc/x86_64-linux-gnu/7/../../../i386-linux-gnu/crti.o
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/crtbeginS.o

... [Game object files] ...

LOAD /usr/lib/gcc/x86_64-linux-gnu/7/../../../i386-linux-gnu/libdl.so
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/../../../i386-linux-gnu/libpthread.so
START GROUP
LOAD /lib/i386-linux-gnu/libpthread.so.0
LOAD /usr/lib/i386-linux-gnu/libpthread_nonshared.a
END GROUP
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/../../../i386-linux-gnu/libc++abi.so
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc.a
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc_s.so
START GROUP
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc_s.so.1
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc.a
END GROUP
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/../../../i386-linux-gnu/libc.so
START GROUP
LOAD /lib/i386-linux-gnu/libc.so.6
LOAD /usr/lib/i386-linux-gnu/libc_nonshared.a
LOAD /lib/i386-linux-gnu/ld-linux.so.2
END GROUP
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc.a
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc_s.so
START GROUP
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc_s.so.1
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc.a
END GROUP
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/crtendS.o
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/../../../i386-linux-gnu/crtn.o
Archive member included to satisfy reference by file (symbol)

/usr/lib/i386-linux-gnu/libc_nonshared.a(stack_chk_fail_local.oS)
                              /home/vesper/Documents/afterburner-game/build/game/obj/hldll/aflock.o (__stack_chk_fail_local)

As-needed library included to satisfy reference by file (symbol)

libc.so.6                     /home/vesper/Documents/afterburner-game/build/game/obj/hldll/client.o (strcpy@@GLIBC_2.0)
/home/vesper/Documents/afterburner-game/build/game/obj/hldll/egon.o: dynamic relocation against `CEgon::UpdateEffect(Vector const&, Vector const&, float)' in read-only section `.text'

...

Linker script and memory map

LOAD /usr/lib/gcc/x86_64-linux-gnu/7/../../../i386-linux-gnu/crti.o
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/crtbeginS.o

... [Game object files] ...

LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc.a
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc_s.so
START GROUP
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc_s.so.1
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc.a
END GROUP
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/../../../i386-linux-gnu/libc.so
START GROUP
LOAD /lib/i386-linux-gnu/libc.so.6
LOAD /usr/lib/i386-linux-gnu/libc_nonshared.a
LOAD /lib/i386-linux-gnu/ld-linux.so.2
END GROUP
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc.a
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc_s.so
START GROUP
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc_s.so.1
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/libgcc.a
END GROUP
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/32/crtendS.o
LOAD /usr/lib/gcc/x86_64-linux-gnu/7/../../../i386-linux-gnu/crtn.o

看来我已经解决了,部分原因是偶然遇到另一个StackOverflow评论

首先,该项目没有包含链接器选项
-Wl,--no undefined
,如果检测到未定义的符号,则不允许编译时链接完成,这将使我的生活更轻松。一旦我添加了这个,我注意到还有一些无法找到的数学库函数,我找到了这个答案


事实证明,问题在于链接所针对的库是在链接器调用中的对象文件之前指定的,而对上述答案的一条评论指出,这将导致忽略它们。我把它们移到了通话的末尾,一切都正常了。

echo\uztvn10\uuucxxabiv120\uuuu si\u class\u type\u infoE\124; c++filt
结果是
vtable for\uuuuuuxxabiv1::\uu si\u class\u type\u info
。您是否包含
#包含
?你在混合/匹配GCC和叮当声吗?还有源代码。我不确定typeinfo是否包含,但我认为这意味着编译会失败(它在Ubuntu上成功,甚至在我的Mac上正常运行)——不过我会检查一下。好吧,我没有错配GCC和Clang,但我会再看一看。请确切告诉我们您使用的编译器的版本。请不要对此投反对票。对于此类错误,没有其他文档。在这篇文章之后,我通过添加
-lstdc++
链接器标志解决了同样的问题。
-lstdc++
选项对我来说很好。