【问题标题】:undefined reference to Class::method()对 Class::method() 的未定义引用
【发布时间】:2013-01-19 17:56:30
【问题描述】:

我在我的代码中使用了一个名为 ROOT 的框架,ROOT 提供了大量的库,然后有 PROOF 应该允许我的代码并行运行。

应该在TProof.h 中定义一个启动并行环境的静态方法Open。我使用这种方法如下:

//通常包括(包括ROOT的) #包括 //很多代码 int main(int argc, const char *argv[]) { //初始化代码 TProof *p = TProof::Open(""); // 更多代码 返回0; }

g++ 给了我这个错误:

mini2.o: In function `main':
/path/to/file/name.cxx:279: undefined reference to `TProof::Open(char const*, char const*, char const*, int)'

ROOT 提供了一个脚本,它打印所有必要的标志来编译和链接它的库,我正在使用这些标志,在这种情况下:

$ root-config --libs
-L/my/path/root/lib -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -pthread -lm -ldl -rdynamic

我做错了什么?我该如何解决?

【问题讨论】:

  • 您得到的错误是链接器错误,而不是编译器错误。 TProof.h 已被编译器找到(否则该步骤已经失败),但您似乎忘记了针对相关库链接
  • 我正在链接所有必要的库,至少 ROOT 这么认为。
  • 不管怎样,我编辑了这个问题,应该更清楚一点。

标签: g++ ld undefined-reference


【解决方案1】:

您的编译器(链接器)选项中至少缺少-lProof。我不太了解框架,所以我无法告诉你这是你的错还是配置脚本的问题。

(我是这样发现的:下载ROOT的二进制发行版,检查lib文件夹,发现libProof.so。)

如果这还不够,请包含您可以在库目录中找到的其他 Proof* 库。

【讨论】:

    猜你喜欢
    • 2012-07-29
    • 2015-07-10
    • 2011-03-31
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多