解决编译错误 /usr/bin/ld /lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0 undefined reference to `g_once_init_enter_pointer'1
常见情景:编译项目出现某个系统库,如/lib/x86_64-linux-gnu/
中的某个库,出现undefined reference to
xxx 错误。
SHELL
1
/usr/bin/ld: /lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0: undefined reference to `g_once_init_enter_pointer'
初见,Google搜索没有结果,拼尽全力无法战胜。
仔细观察,cmake信息中有warning
SHELL
12
runtime library [libglib-2.0.so.0] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
/home/xxx/anaconda3/lib
疑似导致问题的原因(常识,gtk依赖glib),就是conda中的库覆盖了系统环境。然而,conda中没有gtk。实际上使用了系统的gtk,但是调用了conda的glib,疑似不匹配或者版本不兼容。总之问题出在conda的库上。
于是,简单地export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
,是无效的,因为conda的PATH更早。需要完全退出conda环境(修改bashrc),或者暴力点直接在conda里卸了。base环境越干净越好。
SHELL
12
conda deactivate
conda remove glib
然后再次cmake,warning应该消失,重新编译应能解决上述问题。理论上适用于相同原因造成的其他库ld问题。