如何使用g++编译包含root库的C++程序?

4

我写了一个 C++ 程序(mainPixelDet1.C),使用了在 PixelDet1.C 中定义的类,可以在 root 的交互模式下工作。

但是现在我想在 root 之外使用 g++ 编译它。

以下是我在终端中输入的内容:

g++ -o main mainPixelDet1.C PixelDet1.C `root-config --cflags --glibs`

以下是我得到的结果:

/usr/bin/ld: 找不到 -lGraf3d
usr/bin/ld: 找不到 -lPostscript
/usr/bin/ld: 找不到 -lPhysics
collect2: 错误:ld 返回了 1 个退出状态

注:该错误信息提示编译器无法找到相关库文件。


1
添加-L参数并指定库文件所在的目录。如果它们位于不同的目录中,你可能需要多个-L参数。 - Joe
2
附注:为了清晰明了并方便编译器判断是否需要编译为C++,C++程序应该使用“.cpp”扩展名编写文件。而“.c”则倾向于用于C语言。 - foips
非常感谢!@Joe 它起作用了 :) - Rodrigo Campos de Carvalho
@foips 这个约定并不一定适用于ROOT。特别是交互模式不符合标准的C++,它只是从语法上借鉴了很多东西。就我个人而言,我更喜欢为交互式ROOT编写的代码使用“.C”扩展名,因为这样可以强调它的来源。 - Shep
@Shep 哦,我真的不认为我在最初发布时看到过这个ROOT标签,抱歉。 - foips
2个回答

2

您还需要在root-config中包含--ldflags,以便root-config提供必要的库标志参数。


1
我遇到了同样的问题,安装以下库后问题得以解决:"libroot-*""root-plugin-*""ttf-root-installer"。 如果您感兴趣,我在ROOT论坛上找到了答案,这是链接:https://root.cern.ch/phpBB3/viewtopic.php?t=16352。 要安装库,您可以在终端上输入以下命令行:
sudo apt-get install nameoflibrary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接