You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译TensorFlow C++程序时出现undefined reference错误求助

问题

按照以下步骤构建TensorFlow C++ API库:

git clone https://github.com/tensorflow/tensorflow
cd tensorflow
git checkout v2.11.0

bazel build //tensorflow:libtensorflow_cc.so
bazel build //tensorflow:libtensorflow_framework.so
bazel build //tensorflow:install_headers

编写测试程序my_program.cpp:

#include <tensorflow/core/platform/env.h>
#include <tensorflow/core/public/session.h>

#include <iostream>

using namespace std;
using namespace tensorflow;

int main()
{
    Session* session;
    Status status = NewSession(SessionOptions(), &session);
    if (!status.ok()) {
        cout << status.ToString() << "\n";
        return 1;
    }
    cout << "Session successfully created.\n";
}

使用以下命令编译时出现链接错误,提示tensorflow::SessionOptions::SessionOptions()等符号未定义,但通过nm检查libtensorflow_cc.so确认对应符号存在:

g++ \
  -std=c++17 \
  -I./tensorflow/bazel-bin/tensorflow/include/ \
  -I./root/.cache/bazel/_bazel_root/68a62076e91007a7908bc42a32e4cff9/external/com_google_protobuf/src/ \
  -L./tensorflow/bazel-bin/tensorflow/ \
  -ltensorflow_cc \
  -ltensorflow_framework \
  my_program.cpp -o my_program

原因与解决办法

核心原因:编译参数顺序错误

GCC链接器遵循从左到右解析输入的逻辑:

  1. 先处理源文件/目标文件,记录其中的未定义符号
  2. 再处理库文件,用库内符号匹配当前已记录的未定义符号

你的命令把源文件my_program.cpp放在了库参数之后,导致链接器先处理TensorFlow库时,还未读取到源文件的符号需求,因此不会将库中相关符号纳入链接。后续处理源文件时,未定义符号无法被解析,最终报错。

额外注意事项

  • 头文件路径:当前使用的./tensorflow/bazel-bin/tensorflow/include/是正确的,install_headers目标会将头文件安装到该目录
  • C标准匹配:TensorFlow 2.11默认用C17编译,-std=c++17参数无需调整
  • 库依赖顺序:libtensorflow_cc.so依赖libtensorflow_framework.so,当前命令中-ltensorflow_cc在前、-ltensorflow_framework在后的顺序是正确的

修正后的编译命令

将源文件移至最前端,库参数放在后面:

g++ \
  my_program.cpp \
  -std=c++17 \
  -I./tensorflow/bazel-bin/tensorflow/include/ \
  -I./root/.cache/bazel/_bazel_root/68a62076e91007a7908bc42a32e4cff9/external/com_google_protobuf/src/ \
  -L./tensorflow/bazel-bin/tensorflow/ \
  -ltensorflow_cc \
  -ltensorflow_framework \
  -o my_program

执行修正后的命令即可正常生成可执行文件,运行后会输出Session successfully created.。

内容的提问来源于stack exchange,提问作者Sarrión

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:13:29