如何使用bazel将tensorflow C API静态链接到libstdc ++和libgcc_s?

时间:2016-11-22 16:07:43

标签: c gcc linker tensorflow bazel

我想将tensorflow C API编译为Debian Wheezy的共享库,并且因为它的某些依赖项使用了Wheezy中提供的gcc版本不支持的C ++ 11特性,所以我最终编译了gcc并在我的本地安装它机。

现在如果我使用bazel编译tensorflow,使用我的本地gcc安装,我最终会得到一个动态链接到libstdc++libgcc_s的二进制文件来自本地gcc安装:

$ ldd libtensorflow_c.so 
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc06351e000)
    libstdc++.so.6 => /my/local/path/gcc-4.9.4-installation/lib64/libstdc++.so.6 (0x00007fc0638ab000)
    libgcc_s.so.1 => /my/local/path/gcc-4.9.4-installation/lib64/libgcc_s.so.1 (0x00007fc063307000)
    ...

我想在其他计算机上使用已编译的tensorflow库,因此我不希望它依赖于libstdc++libgcc_s的非标准位置。一种可能性是静态地将它们联系起来,但是我不能让它成为它。

我尝试在bazel的-static-libgcc文件中设置链接器标记-static-libstdc++tools/cpp/CROSSTOOL,并将它们作为linkopts传递给cc_binary目标(在张量流的libtensorflow_c.so文件中命名为BUILD}(尝试在那里设置linkstatic = 1)并在--linkopt bazel build命令的<?xml version="1.0" encoding="UTF-8"?> <api context="/flight" name="Flight" xmlns="http://ws.apache.org/ns/synapse"> <resource methods="PUT" uri-template="/"> <inSequence> <property expression="//airport_cd/text()" name="airport_cd" scope="default" type="STRING" /> <property name="HTTP_METHOD" scope="axis2" type="STRING" value="GET" /> <send receive="insertFlightSeq"> <endpoint> <address format="rest" uri="https://jsonplaceholder.typicode.com/posts/1" /> </endpoint> </send> <send /> </inSequence> <outSequence> <send /> </outSequence> <faultSequence /> 选项中使用它们,结果是两个库仍然是动态链接的。

0 个答案:

没有答案