Tensorflow包含C++的路径

Tensorflow include path for C++

本文关键字:路径 C++ 包含 Tensorflow      更新时间:2023-10-16

我在OS X上从源代码构建了TensorFlow,我包含了vscode:的c_cpp_properties.json的路径

"includePath": [
...
"/Users/macuser/.virtualenvs/cv/lib/python3.7/site-packages/tensorflow/include"
],

我必须包括这些标题,以删除一些丢失的标题错误

#define _BSD_SOURCE
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "tensorflow/core/framework/op.h"
#include "tensorflow/core/framework/shape_inference.h"

我从源代码编译了tensorflow以用于C++应用程序,在文件夹/Users/macuser/development/tensorflow中,我试图包括/Users/macuser/development/tensorflow文件夹中的"tensorflow/core/framework/op.h",但它抛出了许多丢失的头,这是通过使用路径"/Users/macuser/.virtualenvs/cv/lib/python3.7/site-packages/tensorflow/include"解决的

现在,当我使用我的编译命令时:

g++ -g main.cpp -std=c++17 -I /Users/macuser/.virtualenvs/cv/lib/python3.7/site-packages/tensorflow/include -o main -v

我收到以下错误(使用-v查看调用(:

Apple clang version 11.0.0 (clang-1100.0.33.12)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.14.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name main.cpp -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -fno-strict-return -masm-verbose -munwind-tables -target-sdk-version=10.14 -target-cpu penryn -dwarf-column-info -debug-info-kind=standalone -dwarf-version=4 -debugger-tuning=lldb -ggnu-pubnames -target-linker-version 520 -v -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -I /usr/local/Cellar/opencv/4.1.2/include/opencv4/opencv -I /usr/local/Cellar/opencv/4.1.2/include/opencv4 -I /usr/local/Cellar/gdal/2.4.2_2/include -I /usr/local/Cellar/opencv/4.1.2/include -I /usr/local/Cellar/mysql++/3.2.5/include/mysql++ -I /usr/local/Cellar/mysql/8.0.15/include/mysql -I /usr/local/Cellar/mysql-client/5.7.23_1/include -I /Users/macuser/.virtualenvs/cv/lib/python3.7/site-packages/tensorflow/include -I/usr/local/include -stdlib=libc++ -internal-isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1 -Wno-framework-include-private-from-public -Wno-atimport-in-framework-header -Wno-extra-semi-stmt -Wno-quoted-include-in-framework-header -std=c++17 -fdeprecated-macro -fdebug-compilation-dir /Users/macuser -ferror-limit 19 -fmessage-length 146 -stack-protector 1 -mdarwin-stkchk-strong-link -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fobjc-runtime=macosx-10.14.0 -fcxx-exceptions -fexceptions -fmax-type-align=16 -fdiagnostics-show-option -fcolor-diagnostics -o /var/folders/cl/z5blm1lj4591dtbsxn0xj8km0000gn/T/main-9c8f11.o -x c++ /var/www/cpp/png2stl/main.cpp
clang -cc1 version 11.0.0 (clang-1100.0.33.12) default target x86_64-apple-darwin18.7.0
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1"
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/local/include"
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
/Users/macuser/.virtualenvs/cv/lib/python3.7/site-packages/tensorflow/include
/usr/local/include
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/include
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory)
End of search list.
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -no_deduplicate -dynamic -arch x86_64 -macosx_version_min 10.14.0 -syslibroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -o /var/www/cpp/png2stl/main  /var/folders/cl/z5blm1lj4591dtbsxn0xj8km0000gn/T/main-9c8f11.o  -L/usr/local/lib -lc++ -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.osx.a
Undefined symbols for architecture x86_64:
"tensorflow::internal::LogMessageFatal::LogMessageFatal(char const*, int)", referenced from:
tensorflow::core::RefCounted::~RefCounted() in main-9c8f11.o
"tensorflow::internal::LogMessageFatal::~LogMessageFatal()", referenced from:
tensorflow::core::RefCounted::~RefCounted() in main-9c8f11.o
"tensorflow::internal::CheckOpMessageBuilder::ForVar2()", referenced from:
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >* tensorflow::internal::MakeCheckOpString<int, int>(int const&, int const&, char const*) in main-9c8f11.o
"tensorflow::internal::CheckOpMessageBuilder::NewString()", referenced from:
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >* tensorflow::internal::MakeCheckOpString<int, int>(int const&, int const&, char const*) in main-9c8f11.o
"tensorflow::internal::CheckOpMessageBuilder::CheckOpMessageBuilder(char const*)", referenced from:
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >* tensorflow::internal::MakeCheckOpString<int, int>(int const&, int const&, char const*) in main-9c8f11.o
"tensorflow::internal::CheckOpMessageBuilder::~CheckOpMessageBuilder()", referenced from:
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >* tensorflow::internal::MakeCheckOpString<int, int>(int const&, int const&, char const*) in main-9c8f11.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

UPDATE我使用了错误的路径,正确的路径是在我的编译目录/Users/macuser/development/tensorflow/上设置的,还必须在构建命令中传递-lensorflow_framework和-lensorFlow_cc

它编译成功,但在运行编译的程序(./main(时出现此错误:

dyld: Library not loaded: @rpath/libtensorflow_framework.2.dylib
Referenced from: /private/var/www/cpp/./main
Reason: image not found

我看到在我的路径下,我有这个库~/development/tensorflow/bazel-bin/tensorflow,还有其他类似名称的库:

$ls
__init__.py                         core                                libtensorflow_cc.so.2.0.0           stream_executor
__init__.py.original                libtensorflow.so                    libtensorflow_framework.2.0.0.dylib tools
_api                                libtensorflow.so.2                  libtensorflow_framework.2.dylib     virtual_root.__init__.py
c                                   libtensorflow.so.2.0.0              libtensorflow_framework.dylib
cc                                  libtensorflow_cc.so                 lite
compiler                            libtensorflow_cc.so.2               python

otool -L libtensorflow_cc.so的输出

$ otool -L libtensorflow_cc.so
libtensorflow_cc.so:
@rpath/libtensorflow_cc.so.2 (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 800.7.0)
@rpath/libtensorflow_framework.2.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1281.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1673.126.0)
/System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 59306.41.2)
/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1673.126.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)

我能够通过将libtensorflow_framework.2.dyliblibtensorflow_cc.so从TensorFlow构建目录复制到与我的可执行文件相同的目录来解决这个问题。