On 2021-05-21 16:41 +0200, Yun Peng wrote: > > $chrpath libtensorflow_cc.so.2.3.1 > > libtensorflow_cc.so.2.3.1: > RUNPATH=$ORIGIN/../_solib_k8/_U_S_Stensorflow_Clibtensorflow_Ucc.so.2.3.1___Utensorflow:$ORIGIN/ > > $ chrpath libtensorflow_framework.so.2.3.1 > > libtensorflow_framework.so.2.3.1: RUNPATH=$ORIGIN/ > I think those rpaths are introduced here in tf_cc_shared_object through > _rpath_linkopts, which is used to define both tensorflow_cc and > tensorflow_framework. OK. That's really helpful. Thanks. I see it now. So running chrpath -d on the built libraries does indeed work, but using the build machinery to do it right i the first place would be better. So I tried this patch: --- a/tensorflow/tensorflow.bzl +++ b/tensorflow/tensorflow.bzl @@ -620,7 +620,7 @@ def tf_cc_shared_object( deps = deps, linkshared = 1, data = data + data_extra, - linkopts = linkopts + _rpath_linkopts(name_os_full) + select({ + linkopts = linkopts + select({ clean_dep("//tensorflow:ios"): [ "-Wl,-install_name,@rpath/" + soname, ], But that's not sufficient to prevent the rpaths. I did look into the _rpath_linkopts definition too, but my lack of familiarity with bazel is hindering understanding. Is all this .bzl stuff essentially written in python or is it a bazel-specific language? Presumably there are debug modes so I can get more logging detail and interrogate, for example, what the whole 'linkopts' string finally gets set to, and/or the actual compiler lines the build spits out? Currently my build log shows all the warnings, but no compile commands. > I haven't been able to fully understand why TF needs it, but it looks like > TF needs it to make the shared libraries work when deployed, eg. in the TF > pip package. > There is currently no way to turn off this. And I think we should verify > if the TF pip package still works without those rpaths, if so we should be > able to implement a way to opt out them in the bzl file (or even removing > them?). OK. Once I get to building the python bindings we can check that that's working. The debian build will of course not be building a pip. In general rpaths are only actually needed (in debian) when a package has loadable modules in a sub-path of the normal library/exectuable search paths. Wookey -- Principal hats: Linaro, Debian, Wookware, ARM http://wookware.org/
Attachment:
signature.asc
Description: PGP signature