我在使用清除语句后尝试运行程序时遇到错误

时间:2018-12-30 00:44:44

标签: c makefile shared-libraries

我必须编写一个简单的makefile程序,该程序结合了三个文件:mymath.h mymath.ccalc.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时遇到错误

  加载共享库时出现

错误:?:无法打开共享库   文件:没有这样的文件或目录

我知道问题在“ clean”函数中是.so,但是该必需文件是怎么回事,因为它的构建与lib_stat_run类似,但工作正常。我想删除除源文件和两个.exe文件之外的所有文件< / p>

2 个答案:

答案 0 :(得分:0)

您的clean命令配置为删除*.so,它们是libshared依赖的共享对象文件。

答案 1 :(得分:0)

使用one_hot = torch.zeros(18).unsqueeze(0) one_hot[0,1] = 1.0 one_hot tensor([[0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]) one_hot.expand(-1,-1,40,40) Traceback (most recent call last): File "<input>", line 1, in <module> RuntimeError: The expanded size of the tensor (40) must match the existing size (18) at non-singleton dimension 3 构建的可执行文件本身包含所需的库函数,因此不需要外部库。

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