TensorFlow 1.6.0解析计算图遇LNK2001未解析外部符号问题求助
我之前也碰到过类似的TensorFlow链接错误,给你几个针对性的解决方案,应该能搞定这个问题:
确保编译配置完全匹配
这个错误很常见的原因是你的项目编译配置(Debug/Release、x86/x64、MT/MD运行时库)和你引入的TensorFlow库不匹配。比如你用Debug模式编译项目,但链接的是Release版本的tensorflow.lib,就会出现这类未解析符号问题。一定要把项目的配置和TensorFlow库的编译配置对齐。确认添加了正确的PB生成对象文件
TensorShapeProtoDefaultTypeInternal是由Protocol Buffers生成的tensor_shape.pb.cc编译出来的,你需要确保这个文件编译后的.obj文件已经正确添加到你的Visual Studio项目中,而且是和当前TensorFlow版本对应的文件——不要混用不同TensorFlow版本生成的pb obj文件。补充链接Protobuf相关库
TensorFlow的很多核心结构依赖Protobuf库,这个未解析符号本质上是Protobuf默认实例的实现缺失。你需要在链接器输入里添加Protobuf的库文件,比如libprotobuf.lib或者libprotobuf-lite.lib(具体取决于TensorFlow的编译配置),同时确保Protobuf的lib目录已经添加到项目的链接器->附加库目录中。检查链接器输入的完整性
除了tensorflow.lib,还要确认TensorFlow的其他依赖库也被正确引入,比如tensorflow_framework.lib(如果是动态编译的TensorFlow)。有时候只加主库会漏掉一些底层依赖的符号。临时Workaround(不推荐长期使用)
如果上面的方法都试过还是不行,可以尝试在你的项目代码中手动添加这个符号的定义:tensorflow::TensorShapeProtoDefaultTypeInternal* tensorflow::TensorShapeProtoDefaultTypeInternal::instance_ = nullptr;这只是临时绕过错误,最好还是找到根本的链接配置问题。
结合你提供的代码片段——你在处理NodeDef的attr中的value,涉及到TensorShape相关的Proto结构,所以更要确保Protobuf相关的链接配置完全正确。
内容的提问来源于stack exchange,提问作者Minh Tran

