c++中未定义的符号错误

C++ undefined symbol error with ForceFit

本文关键字:符号 错误 未定义 c++      更新时间:2023-10-16

尝试启动用c++编写的软件(ForceFit, https://aclark.chem.wsu.edu/software/)给我以下错误:

./ForceFit
./ForceFit: symbol lookup error: ./ForceFit: undefined symbol: _ZN5Gnome5Glade3Xml6createERKSsRKN4Glib7ustringES7_

我没有访问原始代码文件,但已经搜索了几个Q/A论坛给我一些线索。据我所知,这个错误与库有关。以下是我目前得到的:

ldd -d -r ForceFit
linux-vdso.so.1 (0x00007fff05fdf000)
libgtkmm-2.4.so.1 => /lib64/libgtkmm-2.4.so.1 (0x00007f1081919000)
libgdkmm-2.4.so.1 => /lib64/libgdkmm-2.4.so.1 (0x00007f10816c9000)
libatkmm-1.6.so.1 => /lib64/libatkmm-1.6.so.1 (0x00007f108147b000)
libgtk-x11-2.0.so.0 => /lib64/libgtk-x11-2.0.so.0 (0x00007f1080df0000)
libpangomm-1.4.so.1 => /lib64/libpangomm-1.4.so.1 (0x00007f1080bc1000)
libcairomm-1.0.so.1 => /lib64/libcairomm-1.0.so.1 (0x00007f108099a000)
libglibmm-2.4.so.1 => /lib64/libglibmm-2.4.so.1 (0x00007f108071c000)
libsigc-2.0.so.0 => /lib64/libsigc-2.0.so.0 (0x00007f1080515000)
libgdk-x11-2.0.so.0 => /lib64/libgdk-x11-2.0.so.0 (0x00007f1080251000)
libatk-1.0.so.0 => /lib64/libatk-1.0.so.0 (0x00007f108002b000)
libpangoft2-1.0.so.0 => /lib64/libpangoft2-1.0.so.0 (0x00007f107fe15000)
libgdk_pixbuf-2.0.so.0 => /lib64/libgdk_pixbuf-2.0.so.0 (0x00007f107fbee000)
libpangocairo-1.0.so.0 => /lib64/libpangocairo-1.0.so.0 (0x00007f107f9e1000)
libcairo.so.2 => /lib64/libcairo.so.2 (0x00007f107f6b8000)
libgio-2.0.so.0 => /lib64/libgio-2.0.so.0 (0x00007f107f337000)
libpango-1.0.so.0 => /lib64/libpango-1.0.so.0 (0x00007f107f0ec000)
libfreetype.so.6 => /usr/lib64/freetype-freeworld/libfreetype.so.6 (0x00007f107ee42000)
libz.so.1 => /lib64/libz.so.1 (0x00007f107ec2b000)
libfontconfig.so.1 => /lib64/libfontconfig.so.1 (0x00007f107e9e7000)
libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0 (0x00007f107e795000)
libgmodule-2.0.so.0 => /lib64/libgmodule-2.0.so.0 (0x00007f107e590000)
libgthread-2.0.so.0 => /lib64/libgthread-2.0.so.0 (0x00007f107e38e000)
librt.so.1 => /lib64/librt.so.1 (0x00007f107e186000)
libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x00007f107de4c000)
libglademm-2.4.so.1 => /lib64/libglademm-2.4.so.1 (0x00007f107dc42000)
libglade-2.0.so.0 => /lib64/libglade-2.0.so.0 (0x00007f107da26000)
libxml2.so.2 => /lib64/libxml2.so.2 (0x00007f107d6bc000)
libm.so.6 => /lib64/libm.so.6 (0x00007f107d3ba000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f107d038000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f107ce20000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f107cc02000)
libc.so.6 => /lib64/libc.so.6 (0x00007f107c841000)
libgiomm-2.4.so.1 => /lib64/libgiomm-2.4.so.1 (0x00007f107c48c000)
libX11.so.6 => /lib64/libX11.so.6 (0x00007f107c14c000)
libXfixes.so.3 => /lib64/libXfixes.so.3 (0x00007f107bf45000)
libpng16.so.16 => /lib64/libpng16.so.16 (0x00007f107bd12000)
libXext.so.6 => /lib64/libXext.so.6 (0x00007f107baff000)
libXrender.so.1 => /lib64/libXrender.so.1 (0x00007f107b8f4000)
libXinerama.so.1 => /lib64/libXinerama.so.1 (0x00007f107b6f0000)
libXi.so.6 => /lib64/libXi.so.6 (0x00007f107b4e0000)
libXrandr.so.2 => /lib64/libXrandr.so.2 (0x00007f107b2d5000)
libXcursor.so.1 => /lib64/libXcursor.so.1 (0x00007f107b0c9000)
libXcomposite.so.1 => /lib64/libXcomposite.so.1 (0x00007f107aec6000)
libXdamage.so.1 => /lib64/libXdamage.so.1 (0x00007f107acc3000)
libthai.so.0 => /lib64/libthai.so.0 (0x00007f107aab9000)
libharfbuzz.so.0 => /lib64/libharfbuzz.so.0 (0x00007f107a857000)
libpixman-1.so.0 => /lib64/libpixman-1.so.0 (0x00007f107a5af000)
libEGL.so.1 => /usr/lib64/nvidia/libEGL.so.1 (0x00007f107a3aa000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f107a1a6000)
libxcb-shm.so.0 => /lib64/libxcb-shm.so.0 (0x00007f1079fa1000)
libxcb-render.so.0 => /lib64/libxcb-render.so.0 (0x00007f1079d97000)
libxcb.so.1 => /lib64/libxcb.so.1 (0x00007f1079b75000)
libGL.so.1 => /usr/lib64/nvidia/libGL.so.1 (0x00007f1079840000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f107961d000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f1079402000)
libbz2.so.1 => /lib64/libbz2.so.1 (0x00007f10791f1000)
libexpat.so.1 => /lib64/libexpat.so.1 (0x00007f1078fc7000)
libffi.so.6 => /lib64/libffi.so.6 (0x00007f1078dbe000)
liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f1078b98000)
/lib64/ld-linux-x86-64.so.2 (0x0000563a7c108000)
libdatrie.so.1 => /lib64/libdatrie.so.1 (0x00007f107898f000)
libgraphite2.so.3 => /lib64/libgraphite2.so.3 (0x00007f1078763000)
libGLdispatch.so.0 => /usr/lib64/nvidia/libGLdispatch.so.0 (0x00007f10784ca000)
libXau.so.6 => /lib64/libXau.so.6 (0x00007f10782c6000)
libnvidia-tls.so.358.16 => /usr/lib64/nvidia/tls/libnvidia-tls.so.358.16 (0x00007f10780c2000)
libnvidia-glcore.so.358.16 => /usr/lib64/nvidia/libnvidia-glcore.so.358.16 (0x00007f1076460000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f10761ed000)
undefined symbol: _ZN5Gnome5Glade3Xml6createERKSsRKN4Glib7ustringES7_   (./ForceFit)
undefined symbol: _ZN4Glib7ustringC1ERKSs   (./ForceFit)

列出了可执行文件无法找到的符号。对这些符号名进一步运行c++filt会得到以下结果:

c++filt _ZN5Gnome5Glade3Xml6createERKSsRKN4Glib7ustringES7_
Gnome::Glade::Xml::create(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, Glib::ustring const&, Glib::ustring const&)
c++filt _ZN4Glib7ustringC1ERKSs
Glib::ustring::ustring(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)

不幸的是,我还没有发现需要哪些步骤来解决这个问题,我自己也不熟悉c++。可执行文件的网站指定它依赖于我已经安装的g++/c++编译器以及libglade和gtkmm库。如果相关的话,我正在运行Fedora 23和Gnome 3。

谢谢你的帮助!

您链接到的包似乎是一个非常糟糕的包。tarball不仅包括源代码,还包括编译后的对象模块和可执行文件。

您可能试图直接执行从tarball解压缩的二进制文件。

很明显,这个二进制文件是建立在其他一些古老的,大约2011年的Linux发行版上的,而不是你试图运行这个的那个。而且,当然,它被链接到您没有的共享库,并且您正在看到这些松散打包的代码的结果。

您需要从源代码重新构建整个代码,假设它可以构建。

相关文章: