我尝试在 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)
有人可以指出我如何正确链接我的自定义库的解决方案吗?
正如我所看到的,您在这里得到了满意的答案,解决方案是正常运行配置脚本,打开src/auto/config.mk
,然后将行更改X_PRE_LIBS = -lSM -lICE -lXpm
为X_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 文件夹,然后重新构建。详细:
echo $PATH
并寻找 anaconda lib 目录PATH=[MODIFIED_PATH]
where[MODIFIED_PATH]
是上一步的结果echo $PATH
再次执行查看anaconda目录已经被删除现在该过程使用系统库,而不是 anaconda 并且编译成功。
修改路径的一个例子:如果原来是,/home/you/anaconda3/bin:/usr/local/bin:/usr/sbin:/usr/bin
那么修改后的路径是/usr/local/bin:/usr/sbin:/usr/bin
注意!您可能不想永久更改 PATH(您的 anaconda 安装可能会停止工作),这就是为什么它是从终端而不是 .bashrc 文件完成的。