使用make创建共享库时出现dangling symlink悬空软链接问题
问题根因
你的Makefile中软链接创建命令的路径写法错误,这是导致软链接悬空的直接原因。
从ls -la的输出可以看到,存放在lib/目录下的两个软链接,指向的目标路径写的是./lib/libdhlim.so.1.0。软链接的路径解析是相对于软链接自身所在目录进行的,也就是说系统解析这两个软链接时,实际查找的路径是lib/./lib/libdhlim.so.1.0即lib/lib/libdhlim.so.1.0,这个路径不存在,自然会判定为悬空软链接。
你手动执行相同命令能正常运行,是因为手动输入时大概率调整了路径写法,没有沿用Makefile里带$(LIB_DIR)前缀的目标路径。
修复方法
共享库的软链接通用创建逻辑是在库所在目录下,直接用文件名创建相对路径软链接,修改Makefile的构建段即可:
# The library build step. lib : $(DHLLOBJS) $(CC) $(XCFLAGS) $(SCFLAGS)$(SLIB).1 $(INCFLAGS) -o $(LIB_DIR)/$(SLIB).1.0 \ $(DLOPATHS) $(LNKFLAGS) # 先切换到库存放目录,再创建同目录下的相对软链接 cd $(LIB_DIR) && ln -sf $(SLIB).1.0 $(SLIB).1 cd $(LIB_DIR) && ln -sf $(SLIB).1.0 $(SLIB)
修改后重新编译,再查看lib目录的软链接,指向关系会变成同目录下的真实库文件:
lrwxrwxrwx 1 root root 15 Jul 5 21:13 libdhlim.so -> libdhlim.so.1.0 lrwxrwxrwx 1 root root 15 Jul 5 21:13 libdhlim.so.1 -> libdhlim.so.1.0 -rwxrwxrwx 1 root root 23792 Jul 5 21:13 libdhlim.so.1.0
此时再执行chmod命令就不会触发悬空软链接报错。
内容的提问来源于stack exchange,提问作者skrowten_hermit
相关产品推荐
相关产品推荐

