我正在尝试在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。我已经在这个版本上工作了很长时间,并希望得到任何帮助。
答案 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>
-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
ln -s libfoo_v1.so libfoo.so
的符号链接,然后才能执行代码。