5

我正在尝试在 Ubuntu 12.04 64 位上构建 SLitrani。我已经从源代码构建了 ROOT 5.34.03,并且我确实弄清楚了如何为 $ROOTDEV 设置 LD_LIBRARY_PATH 和 PATH 变量,所以问题不存在但是当我尝试制作 SplineFit 时,我得到了

>>> g++: error: unrecognized option ‘-soname=libSplineFit.so’
make: *** [libSplineFit.so] Error 1

我也确实将 Makefiles 中的所有内容都更改-m32-m64,所以我不知道发生了什么。我能够安装 TwoPad,但无法从 SplineFit 继续。我在这个版本上已经有一段时间了,如果有任何帮助,我将不胜感激。

4

3 回答 3

4

从内存中,soname是链接器操作,而不是编译器操作。因此,如果您使用g++,您可能需要将选项更改为:

-Wl,-soname=libSplineFit.so

以下记录表明这是必要的:

pax> g++ --soname=x -Wall -o qq qq.cpp
cc1plus: error: unrecognized command line option "-fsoname=x"

pax> g++ -Wl,-soname=x -Wall -o qq qq.cpp

pax> 

来自gcc 的在线 GNU 文档

-Wl,option:将选项作为选项传递给链接器。如果 option 包含逗号,则在逗号处将其拆分为多个选项。

于 2012-11-25T02:34:23.573 回答
2

我知道这是一个老问题,但经过一周的努力,我认为我应该发布我的发现。

我已经为此成功编辑了 makefile,以便它们可以在 Ubuntu 12.04 x64 上编译。

您可以完全删除 -soname 选项,这似乎是不必要的。

如前所述:所有“m32”都更改为“m64”。

您可以将“$ROOTSYS/libs”替换为“$ROOTLIBS”

并使用 TwoPad makefile 重新排序库顺序(在 LIBS += (.....) 下),以便 -lTwoPad 不在列表中的最后一个,而对于 VisuSLitrani,使 -lPhysMore 在其组中的最后一个。

据我所知,可以忽略“设置但未使用”的错误。

如果其中任何一个仍然不起作用,请与我联系,我可以将我的 makefile 发送给您。

于 2013-06-17T12:08:34.203 回答
0

这里很好地解释了 -soname 链接器选项,如何调用它以及它有什么用处。

概括

您可以简单地使用gcc -shared -Wl,-soname,libfoo_v1.so -o libfoo_v1.so libfoo_v1.o并跳过以下讨论;)

  • 称它为gcc -shared -Wl,-soname,libfoo.so -o libfoo_v1.so libfoo_v1.o
  • 编译后,您需要创建一个指向 libfoo_v1.so 的符号链接,ln -s libfoo_v1.so libfoo.so然后才能执行代码。
  • 这用于在编译时和运行时链接不同的共享库。显然这些库需要一个类似的接口。您可以使用它来管理不同的版本。
于 2020-07-17T08:38:26.710 回答