我必须编写一个简单的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
时遇到错误
加载共享库时出现错误:?:无法打开共享库 文件:没有这样的文件或目录
我知道问题在“ clean”函数中是.so,但是该必需文件是怎么回事,因为它的构建与lib_stat_run
类似,但工作正常。我想删除除源文件和两个.exe文件之外的所有文件< / p>
答案 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)库中的函数,仅包含原型,因此外部库在运行时可见。