创建共享库链接时的Makefile依赖项
在一个项目中,我已经创建了一个名为“myshare”的共享库。该库已创建为“libmyshare.so.1.0.0”,其位置相对于makefile,相对地址为“adir/lib” 在makefile中,我想为共享库创建名为“libmyshare.so.1”和“libmyshare.so”的符号链接。为了在makefile中执行此操作,我有以下几行代码:创建共享库链接时的Makefile依赖项,makefile,shared-libraries,Makefile,Shared Libraries,在一个项目中,我已经创建了一个名为“myshare”的共享库。该库已创建为“libmyshare.so.1.0.0”,其位置相对于makefile,相对地址为“adir/lib” 在makefile中,我想为共享库创建名为“libmyshare.so.1”和“libmyshare.so”的符号链接。为了在makefile中执行此操作,我有以下几行代码: MYSHAREL = ./adir/lib/libmyshare.so.1.0.0 MYSHAREL1 = ./adir/lib/libmysh
MYSHAREL = ./adir/lib/libmyshare.so.1.0.0
MYSHAREL1 = ./adir/lib/libmyshare.so.1
MYSHAREL2 = ./adir/lib/libmyshare.so
MYSHARELIBS = $(MYSHAREL) $(MYSHAREL1) $(MYSHAREL2)
.PHONY: all
all: myexetarget
myexetarget : various_files $(MYSHARELIBS)
various_commands_to_make_target
$(MYSHAREL1): $(MYSHAREL)
@echo "Creating symbolic link $(MYSHAREL1)"
@ln -s $(MYSHAREL) $(MYSHAREL1)
$(MYSHAREL2): $(MYSHAREL)
@echo "Creating symbolic link $(MYSHAREL2)"
@ln -s $(MYSHAREL) $(MYSHAREL2)
当我运行“make”命令时,始终会创建指向共享库的链接,即使它们已经存在,即使共享库的日期早于已创建符号链接的日期。此外,当我尝试实际链接到目标中的共享库时,尽管上面未显示链接器选项中有-L./adir/lib和-lmyshare选项,但链接失败:
/usr/bin/ld: cannot find -lmyshare
这两个问题都使我相信,我没有正确地指定共享库的名称或相对位置,使makefile处理能够理解它。有人知道我做错了什么吗?您使用ln-s可能是您出现问题的原因。如果从您的顶级目录执行:
ln -s ./adir/lib/libmyshare.so.1.0.0 ./adir/lib/libmyshare.so.1
这就是make规则所做的,在./adir/lib中创建了一个符号链接,名为libmyshare.so.1,指向./adir/lib/libmyshare.so.1.0.0:
因此,./adir/lib/libmyshare.So.1实际上指向不存在的。/adir/lib/adir/lib/libmyshare.So.1.0.0
您可以通过以下方式替换ln-s命令:
@ln -sr $(MYSHAREL) $(MYSHAREL1)
我的丈夫也一样。ln的-r选项创建相对于链接位置的符号链接。GNUMake 3.8.1似乎无法将符号链接识别为现有文件。至于为什么链接失败,你必须给我们一个可重复的例子。默认情况下,GNU make不考虑符号链接的修改时间。它考虑它指向的任何对象的修改时间,但是-L选项改变了这一点。即使共享库的链接已经存在,也会始终创建它们,这是什么意思?您如何知道它们是重新创建的?最后,您如何构建共享库?您显示的任何规则都不能构建它。
@ln -sr $(MYSHAREL) $(MYSHAREL1)