G ++:错误:无法识别的选项'-soname'

时间:2012-11-25 02:27:31

标签: g++

我正在尝试在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。我已经在这个版本上工作了很长时间,并希望得到任何帮助。

3 个答案:

答案 0 :(得分: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> 

来自online GNU docs for gcc

  

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

答案 1 :(得分:2)

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

我已成功编辑了makefile,因此可以在Ubuntu 12.04 x64上编译。

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

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

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

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

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

如果其中任何一项仍无效,请与我联系,我可以发送给我的makefile文件。

答案 2 :(得分:0)

Here对-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的符号链接,然后才能执行代码。
  • 这用于在编译时和运行时链接到不同的共享库。显然,这些库需要类似的接口。您可以使用它来管理不同的版本。