【发布时间】:2021-05-05 19:50:53
【问题描述】:
我建立Gource 项目。执行make时出现编译错误。
g++ -std=gnu++0x -Wall -Wno-sign-compare -Wno-reorder -Wno-unused-but-set-variable -Wno-unused-variable -g -O2 -pthread -pthread -o gource src/gource-action.o src/gource-bloom.o src/gource-caption.o src/core/gource-conffile.o src/core/gource-display.o src/core/gource-frustum.o src/ core/gource-fxfont.o src/core/gource-logger.o src/core/gource-mousecursor.o src/core/gource-plane.o src/core/gource-ppm.o src/core/gource-quadtree .o src/core/gource-regex.o src/core/gource-resource.o src/core/gource-sdlapp.o src/core/gource-seeklog.o src/core/gource-settings.o src/core /gource-shader.o src/core/gource-shader_common.o src/core/gource-stringhash.o src/core/gource-texture.o src/core/gource-png_writer.o src/core/gource-timezone。 o src/core/gource-vbo.o src/core/gource-vectors.o src/gource-dirnode.o src/gource-file.o src/formats/gource-apache.o src/formats/gource-bzr。 o src/formats/gource-commitlog.o src/formats/gource-custom.o src/formats/gource-cvs-exp.o src/formats/gource-cvs2cl.o src/formats /gource-git.o src/formats/gource-gitraw.o src/formats/gource-hg.o src/formats/gource-svn.o src/gource-gource.o src/gource-gource_shell.o src/gource -gource_settings.o src/gource-key.o src/gource-logmill.o src/gource-main.o src/gource-pawn.o src/gource-slider.o src/gource-spline.o src/gource- textbox.o src/gource-user.o src/gource-zoomcamera.o src/tinyxml/gource-tinyxmlerror.o src/tinyxml/gource-tinystr.o src/tinyxml/gource-tinyxml.o src/tinyxml/gource- tinyxmlparser.o -lGL -lGLU -lfreetype -lpcre -lGLEW -lGLU -lGL -lSDL2_image -lSDL2 -lpng15 -lboost_system -lboost_filesystem src/gource-gource_settings.o:在函数
boost::filesystem::path::path<boost::filesystem::directory_entry>(boost::filesystem::directory_entry const&, boost::enable_if<boost::filesystem::path_traits::is_pathable<boost::decay<boost::filesystem::directory_entry>::type>, void>::type*)': /usr/include/boost/filesystem/path.hpp:139: undefined reference toboost::filesystem::path_traits::dispatch(boost::filesystem::directory_entry const&, std::__cxx11::basic_string&, std::codecvt const&)' collect2: error: ld 返回 1 个退出状态
使用 libboost_filesystem.so.1.53.0 构建环境。
⋊> /h/m/Gource on master ◦ ll /usr/lib64/libboost_filesystem.so 18:26:31
lrwxrwxrwx. 1 root root 29 Sep 27 2020 /usr/lib64/libboost_filesystem.so -> libboost_filesystem.so.1.53.0*
我使用strings 挖掘libboost_filesystem.so.1.53.0 并找到像boost::filesystem::path_traits::dispatch 这样的符号。
⋊> /h/m/Gource on master ◦ strings /usr/lib64/libboost_filesystem-mt.so | grep path_traits 18:29:50
_ZN5boost10filesystem11path_traits8dispatchERKNS0_15directory_entryERSsRKSt7codecvtIwc11__mbstate_tE
_ZN5boost10filesystem11path_traits7convertEPKcS3_RSbIwSt11char_traitsIwESaIwEERKSt7codecvtIwc11__mbstate_tE
_ZN5boost10filesystem11path_traits7convertEPKwS3_RSsRKSt7codecvtIwc11__mbstate_tE
找到符号:
> ⋊> /h/m/Gource on master ◦ nm -DC /usr/lib64/libboost_filesystem.so | grep dispatch
0000000000007800 T boost::filesystem::path_traits::dispatch(boost::filesystem::directory_entry const&, std::string&, std::codecvt<wchar_t, char, __mbstate_t> const&)
这样的图书馆节目:
⋊> /h/m/Gource on master ◦ ls /usr/lib64/libboost_filesystem.so* -l 19:22:03
lrwxrwxrwx. 1 root root 29 Sep 27 2020 /usr/lib64/libboost_filesystem.so -> libboost_filesystem.so.1.53.0*
-rwxr-xr-x. 1 root root 94760 Apr 1 2020 /usr/lib64/libboost_filesystem.so.1.53.0*
-rwxr-xr-x. 1 root root 103592 Apr 24 2019 /usr/lib64/libboost_filesystem.so.1.69.0*
这个编译错误是什么意思?提前致谢。
【问题讨论】:
-
嗯我不认识这个
/usr/lib64/lib 目录,你的系统是什么?你能执行nm -DC /usr/lib64/libboost_filesystem.so | grep dispatch吗?您确定您的系统中或本地目录中没有任何与 boost 冲突的版本吗? -
⋊> /h/m/Gource on master ◦ nm -DC /usr/lib64/libboost_filesystem.so | grep dispatch 118:51:14 0000000000007800 T boost::filesystem::path_traits::dispatch(boost::filesystem::directory_entry const&, std::string&, std::codecvt
const&) -
@pptaszni 嗨 pptaszni。我使用 -l:libboost_system.so.1.53.0 来澄清确切的路径,同样的错误来了。