获取错误 /usr/lib/../lib64/libSM.so: undefined reference to `uuid_unparse_lower@UUID_1.0' 试图编译最新版本的 vim 时

chr*_*lle 6 vim

我尝试在 Red Hat 6.6 上安装最新版本的 vim。我使用下面的脚本来运行配置:

# change to folder where vim sources are
cd ~/vim

# here I compiled newest version of libuuid.
LIBDIR="/home/muellc1b/uuid/lib"


export LD_LIBRARY_PATH=$LIBDIR:$LD_LIBRARY_PATH # prepend to path
export LDFLAGS="-L$LIBDIR"
#export LIBS="-llibuuid.so"

./configure \
    --prefix=/home/muellc1b/vim_installation
     #LIBS="-l$LIBDIR" \
     #LDFLAGS="-L$LIBDIR"
Run Code Online (Sandbox Code Playgroud)

尝试运行 makefile 时,出现以下错误:

  gcc   -L/home/muellc1b/uuid/lib -L/usr/local/lib -Wl,--as-needed [...]   -pthread -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0   -lSM -lICE -lXt -lX11 -lSM -lICE  -lm -ltinfo -lelf -lnsl  -lselinux -lacl -lattr -lgpm
/usr/lib/../lib64/libSM.so: undefined reference to `uuid_unparse_lower@UUID_1.0'
/usr/lib/../lib64/libSM.so: undefined reference to `uuid_generate@UUID_1.0'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

有人可以指出我如何正确链接我的自定义库的解决方案吗?

MF.*_*.OX 9

正如我所看到的,您在这里得到了满意的答案,解决方案是正常运行配置脚本,打开src/auto/config.mk,然后将行更改X_PRE_LIBS = -lSM -lICE -lXpmX_PRE_LIBS = -luuid -lSM -lICE -lXpm. 然后做make

我有完全相同的错误消息,但是在编译 PCL(点云库)时。该错误有不同的原因和不同的解决方案。我会在这里添加它,因为这个页面是在寻找解决方案时出现的 - 也许它会对某人有所帮助。

我的问题是,在这样做cmake ..之前,make它给出了这样的警告:

CMake Warning at cmake/pcl_targets.cmake:194 (add_library):
Cannot generate a safe runtime search path for target pcl_io because
files in some directories may conflict with libraries in implicit directories:
Run Code Online (Sandbox Code Playgroud)

所有被引用的目录都在anaconda3/lib. 我忽略了它并make给了我同样的错误libSM.so: undefined reference to `uuid_unparse_lower@UUID_1.0'和更多:)。解决方案是从路径中删除 anaconda lib 文件夹,然后重新构建。详细:

  1. 删除构建目录并重新创建
  2. echo $PATH 并寻找 anaconda lib 目录
  3. 复制上一步的 PATH 输出并删除对 anaconda 文件夹的引用
  4. 执行PATH=[MODIFIED_PATH]where[MODIFIED_PATH]是上一步的结果
  5. echo $PATH再次执行查看anaconda目录已经被删除
  6. 在同一个终端窗口中再次构建项目

现在该过程使用系统库,而不是 anaconda 并且编译成功。

修改路径的一个例子:如果原来是,/home/you/anaconda3/bin:/usr/local/bin:/usr/sbin:/usr/bin那么修改后的路径是/usr/local/bin:/usr/sbin:/usr/bin

注意!您可能不想永久更改 PATH(您的 anaconda 安装可能会停止工作),这就是为什么它是从终端而不是 .bashrc 文件完成的。

  • 就我而言,我发现它从不同的来源中选择了 `libsm`。最后的解决方法是 `conda install -c conda-forge xorg-libsm` 并重建 (6认同)