我想将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 />
选项中使用它们,结果是两个库仍然是动态链接的。