我目前正試圖在我的程序中使用Tensorflow的共享庫與另一個立體視覺庫,但是當我同時使用兩個立體視覺庫時出現分割錯誤。使用與另一個庫的張量流時的分割錯誤,都鏈接到eigen3
我爲tensorflow創建了一個共享庫「libtensorflow_cc.so」,這樣我就可以在其他使用CMake的程序中使用TensorFlow。我可以使用它編譯一個簡單的tensorflow程序並運行它:神經網絡工作正常,我複製了我用Python獲得的結果。 TensorFlow(r0.12)用Protobuf(3.1.0)和Eigen(v3)編譯。
我可以用專用的立體視覺共享庫編譯我的立體視覺程序,並在沒有TensorFlow的情況下運行它。
然而,當我包括Tenserflow這樣的:
#include "tensorflow/core/lib/core/refcount.h"
在前面的立體視覺方案
,不使用其他任何東西從TensorFlow,我可以重新編譯,但我會在運行時的分割錯誤。
立體視覺專用共享庫包括eigen3。 TensorFlow有它自己的版本的eigen3,它使用原始eigen3的一些功能。
因此,我認爲TensorFlow包含的定義替換了包含eigen3時使用的原始定義。當專用立體視覺庫使用TensorFlow的eigen3定義時,它會崩潰。我跑Valgrind的的程序,看看這個:
==10038== Process terminating with default action of signal 11 (SIGSEGV)
==10038== General Protection Fault
==10038== at 0x7E66E2D: Eigen::ColPivHouseholderQR >::computeInPlace() (in /home/hammouche/.cache/bazel/_bazel_hammouche/0355a6c384eef63f75e9b7278f4fc05b/execroot/tensorflow/bazel-out/local_linux-opt/bin/tensorflow/libtensorflow_cc.so)
==10038== by 0x1108C490: Eigen::LevenbergMarquardt, double>::minimizeOneStep(Eigen::Matrix&) (in /usr/local/zed/lib/libsl_calibration.so)
功能Eigen::LevenbergMarquardt
在立體視覺庫(/usr/local/zed/lib/libsl_calibration.so
)使用來自TensorFlow的本徵(/home/hammouche/.cache/bazel/_bazel_hammouche/0355a6c384eef63f75e9b7278f4fc05b/execroot/tensorflow/bazel-out/local_linux-opt/bin/tensorflow/libtensorflow_cc.so
)的定義,而應該從安裝在徵使用的定義電腦(/usr/local/include/eigen3
)。
我該如何解決這個問題?非常感謝您的幫助