尝试在使用clean语句后运行程序时出错

尝试在使用clean语句后运行程序时出错,c,makefile,shared-libraries,C,Makefile,Shared Libraries,我必须编写简单的makefile程序,它包含三个文件:mymath.hmymath.c和calc.c,建立静态和共享库,链接所有内容,最后删除所有不必要的文件 我已经完成了我的程序,但是当我试图运行/libshared时,我得到了一个错误 all: lib_dyn_run lib_stat_run clean lib_dyn_run: calc.c lib_dyn.so gcc calc.c -o libshared -L. lib_dyn.so lib_dyn.so: mym

我必须编写简单的
makefile
程序,它包含三个文件:
mymath.h
mymath.c
calc.c
,建立静态和共享库,链接所有内容,最后删除所有不必要的文件

我已经完成了我的程序,但是当我试图运行
/libshared
时,我得到了一个错误

all: lib_dyn_run lib_stat_run clean

lib_dyn_run: calc.c lib_dyn.so
        gcc calc.c -o libshared -L. lib_dyn.so
lib_dyn.so: mymathdyn.o calcdyn.o
        gcc -shared -o lib_dyn.so mymathdyn.o calcdyn.o
mymathdyn.o: mymath.c
        gcc -fPIC -c mymath.c -o mymathdyn.o
calcdyn.o: calc.c
        gcc -fPIC -c calc.c -o calcdyn.o
lib_stat_run: calc.c lib_stat.a
        gcc -o libstatic calc.c -L. lib_stat.a
lib_stat.a: mymath.o calc.o
        ar rcs lib_stat.a mymath.o calc.o
mymath.o: mymath.c mymath.h
        gcc -c mymath.c
calc.o: calc.c mymath.h
        gcc -c calc.c
clean:
        rm -f all *.o *.a *.so *.gch
当我运行
/libstatic
时,一切都很好,我得到了正确的结果

当我运行
/libshared
时,我发现了一个错误

加载共享库时出错:?:无法打开共享对象 文件:没有这样的文件或目录


我知道问题是,所以在“清洁”中函数,但由于它的构建类似于运行正常的
lib_stat\u
,因此该必需文件是如何运行的。我想删除除源文件和两个.exe文件之外的所有文件。您的
clean
命令配置为删除
*。因此,
哪些是您的libshared所依赖的共享对象文件。

一个可执行文件,使用
静态构建的
本身包含所需的库函数,因此不需要外部库


但是,动态可执行文件不包含来自外部(*.so)库的函数,只包含原型,因此外部库在运行时很容易可见。

您似乎有点困惑发布的Makefile缺少几个重要(但不一定是关键)细节,详细信息如下:
.PHONY:all clean
这部分
clean
规则:
*.a*.so
正在消除makefile其余部分刚刚创建的静态和动态库