tf_sampling_so.so等文件怎么生成(多种tf版本都可的顺利解决方法)

目录

1.没有.so文件。

1.1那么.so文件是什么?

1.2改改改

1.3 tf1.4及其以上版本的修改

1.3.1 tf2.1为例

只要按照自己的路径将源码给出的文件种的相关路径改掉便可以实现,我尝试过各种tf版本,都很顺利的实现。(尝试过的版本有1.2,1.3,1.4,1.5,1.13 ,1.14,1.15,2.0,2.1)


这里以Geo-CNN的代码为例子,运行时我们可能会出现这样子的错误:忘记截图

1.没有.so文件。

tf_sampling_so.so: cannot open shared object file: No such file or directory

1.1那么.so文件是什么?

so即为shared object。

[1] 一般来说,so文件就是常说的动态链接库, 都是C或C++编译出来的。与Java比较它通常是用的Class文件(字节码)。

[2] Linux下, so为共享库(动态库),类似于window上的dll文件。so文件时不能直接运行的。

[3] 是ELF格式(Executable and Linking Format)文件,可节约资源,加快速度,代码升级简化。其中,ELF是一种对象文件的格式,
在计算机科学中,是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储的标准文件格式。

1.2改改改

在Geo-CNN-master/models/tf_ops文件下,有以下4个文件

首先打开3d_interpolation文件,发现:

打开.sh文件,原始代码如下:

# TF1.2
#g++ -std=c++11 tf_interpolate.cpp -o tf_interpolate_so.so -shared -fPIC -I /usr/local/lib/python2.7/dist-packages/tensorflow/include -I /usr/local/cuda-8.0/include -lcudart -L /usr/local/cuda-8.0/lib64/ -O2 -D_GLIBCXX_USE_CXX11_ABI=0

# TF1.4
g++ -std=c++11 tf_interpolate.cpp -o tf_interpolate_so.so -shared -fPIC -I $HOME/.local/lib/python3.5/site-packages/tensorflow/include -I /unsullied/sharefs/_admin/cuda/cuda-9.0/cuda/include  -I /usr/local/lib/python2.7/dist-packages/tensorflow/include/external/nsync/public -lcudart -L /unsullied/sharefs/_admin/cuda/cuda-9.0/cuda/lib64/ -L$HOME/.local/lib/python3.5/site-packages/tensorflow -ltensorflow_framework -O2 -D_GLIBCXX_USE_CXX11_ABI=0

如果你直接在改目录下运行sh tf_interpolate_compile.sh,一般情况下都是会报错的。

那么怎么改?

如果你的tensorflow版本在1.4以下,请注释掉1.4的直接用1.2的那行,如果你的tf版本在1.4及1.4以上就用1.4的那行。

1.3 tf1.4及其以上版本的修改

1.3.1 tf2.1为例

首先要明确的一点是,只改路径。将上面的路径语句修改为我们自己的路径。

第1个地址修改:

$HOME/.local/lib/python3.5/site-packages/tensorflow/include

上面的地址是源码主的地址,但是我们自己的不一定是这样子,所以我们需要查看我们自己的地址!!!

可以在自己python的python2.7/site-packages/tensorflow的文件夹查看一下,这里我打开却发现只有py文件,显然在安装的时候,tensorflow/include没有安装到tensorflow文件夹下。

但是同目录下的文件tensorflow_core有:

所以对于上述的路径我们应该改为自己include文件路径。

第2个路径修改:

/unsullied/sharefs/_admin/cuda/cuda-9.0/cuda/include

这里是源码主的cuda地址,不是我们自己的,同时需要修改,一般情况下默认安装目录是下面这种

/usr/local/cuda-10.1/

所以我们需要做的就是查自己cuda的版本号。输入下面语句即可查询。

cat /usr/local/cuda/version.txt

这里,我查到的是10.1。

所以,需要将上述路径改为

/usr/local/cuda-10.1/include

如果你查到的是9.0,那就改为

/usr/local/cuda-9.0/include

第三个地址修改

/usr/local/lib/python2.7/dist-packages/tensorflow/include/external/nsync/public

查找自己的public文件地址

更改,其余地址都是基于这三个的按照这样子将其他地址修改就可以了。

第4个修改

当你改完所有的地址,你却发现在改目录下输入

sh tf_interpolate_compile.sh

爆出下面错误

usr/bin/ld: cannot find -ltensorflow_framework collect2: error: ld returned 1 exit status

你会发现我前面截的图

目录下是libtensorflow_framework.so.2

我们需要将

-ltensorflow_framework

修改为

-l:libtensorflow_framework.so.2

如果文件是libtensorflow_framework.so.1就修改为-l:libtensorflow_framework.so.1

如果文件是libtensorflow_framework.so就修改为-l:libtensorflow_framework.so

然后在.sh文件所在的目录下输入sh tf_interpolate_compile.sh即可完成。

其他文件也是想同的操作,先cd 到xxx.sh所在目录文件夹下,打开xxx.sh文件修改路径,然后再运行sh xxx.sh。

最后的最后,

这里我给出tf_sampling_compile.sh我的修改例子,但这里只是一个例子,具体情况,你得根据自己路径修改。

#/bin/bash
/usr/local/cuda-10.1/bin/nvcc -std=c++11 -c -o tf_sampling_g.cu.o tf_sampling_g.cu -O2 -DGOOGLE_CUDA=1 -x cu -Xcompiler -fPIC

# TF1.2
# g++ -std=c++11 tf_sampling.cpp tf_sampling_g.cu.o -o tf_sampling_so.so -shared -fPIC -I /home/lib/python2.7/site-packages/tensorflow_core/include -I /usr/local/cuda-10.1/include -lcudart -L /usr/local/cuda-10.1/lib64/ -O2 -D_GLIBCXX_USE_CXX11_ABI=0

# TF1.15
g++ -std=c++11 tf_sampling.cpp tf_sampling_g.cu.o -o tf_sampling_so.so -shared -fPIC -I /home/lib/python2.7/site-packages/tensorflow_core/include -I /usr/local/cuda-10.1/include -I /home/lib/python2.7/site-packages/tensorflow_core/include/external/nsync/public -lcudart -L /usr/local/cuda-10.1//lib64/ -L/home/lib/python2.7/site-packages/tensorflow_core -l:libtensorflow_framework.so.1 -O2 -D_GLIBCXX_USE_CXX11_ABI=0

只要按照自己的路径将源码给出的文件种的相关路径改掉便可以实现,我尝试过各种tf版本,都很顺利的实现。(尝试过的版本有1.2,1.3,1.4,1.5,1.13 ,1.14,1.15,2.0,2.1)

  • 12
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaobai_Ry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值