尝试在使用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其余部分刚刚创建的静态和动态库