C ++:使用g ++

时间:2017-07-27 10:16:00

标签: c++ opencv tensorflow g++ libpng

我想在一个图像上用opencv执行一些预处理,这个图像将被送到张量流模型。 预处理部分读入.png文件,代码作为独立程序工作,但我想在运行tensorflow模型的程序中使用它,所以我生成了一个目标文件,如下所示。预处理程序完全独立运行。

g++ -std=c++11 preProcess.cpp -I/home/dpk/anaconda2/include/libpng16 -I/usr/local/include/opencv2 -L/home/dpk/anaconda2/lib -lpng16 -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_core -c

张量流程序Inference.cc编译如下

g++ -std=c++11 preProcess.o Inference.cc -I/home/dpk/anaconda2/include/libpng16 -I/usr/local/include/opencv -I/usr/local/include/opencv2 -I/usr/local/include/tf -I/usr/local/include/eigen3 -I/usr/local/include/tf/bazel-genfiles -g -Wall -D_DEBUG -Wshadow -Wno-sign-compare -w  -L/usr/local/lib/libtensorflow_cc -L/home/dpk/anaconda2/lib -lpng16 -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_flann -lopencv_core `pkg-config --cflags --libs protobuf` -ltensorflow_cc -o inference

这会引发以下错误

/usr/local/lib/libtensorflow_cc.so: undefined reference to `std::thread::_State::~_State()@GLIBCXX_3.4.22'
/usr/local/lib/libtensorflow_cc.so: undefined reference to `std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)())@GLIBCXX_3.4.22'
/usr/local/lib/libtensorflow_cc.so: undefined reference to `typeinfo for std::thread::_State@GLIBCXX_3.4.22'

此错误似乎是由链接-L/home/dpk/anaconda2/lib引起的,因为当我没有链接该文件夹时编译顺利进行,但程序无法读取.png个文件。因此,似乎该文件夹是处理.png所必需的。

我需要我的程序来读取.png文件以及运行tensorflow模型。我怎样才能使它们都有效?

1 个答案:

答案 0 :(得分:0)

Tensorflow是使用gcc 6构建的,因为有一个链接器错误会阻止使用gcc 5成功编译。您必须使用gcc 6构建和链接程序以避免此链接器错误。