2017-04-04 60 views
4

当试图修复一些installation problemsQtCore4时出现此问题。在某些时候make试图运行下面的命令:如何用-fPIC标志重新编译libperl.a目标文件?

/usr/bin/c++ -fPIC -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong \ 
-I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG \ 
-shared -Wl,-soname,QtCore4.so -o ../../blib/arch/auto/QtCore4/QtCore4.so \ 
CMakeFiles/perlqtcore4.dir/binding.cpp.o \ 
CMakeFiles/perlqtcore4.dir/handlers.cpp.o \ 
CMakeFiles/perlqtcore4.dir/marshall_types.cpp.o \ 
CMakeFiles/perlqtcore4.dir/util.cpp.o \ 
CMakeFiles/perlqtcore4.dir/QtCore4.c.o \ 
-lQtCore -lQtGui -lQtNetwork \ 
/home/hakon/perlbrew/perls/perl-5.24.1/lib/5.24.1/x86_64-linux/CORE/libperl.a \ 
../../smokeqt/qtgui/libsmokeqtgui.so.3.0.0 \ 
../../smokeqt/qtnetwork/libsmokeqtnetwork.so.3.0.0 \ 
-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc -lQtGui -lQtNetwork \ 
../../smokeqt/qtcore/libsmokeqtcore.so.3.0.0 -lQtCore \ 
../../smokegen/bin/libsmokebase.so.3.0.0 \ 
-Wl,-rpath,/home/hakon/Qt4-0.99.0/smokeqt/qtgui:/home/hakon/Qt4-0.99.0/smokeqt/qtnetwork:/home/hakon/Qt4-0.99.0/smokeqt/qtcore:/home/hakon/Qt4-0.99.0/smokegen/bin: 

失败并从链接器的以下错误消息:

/usr/bin/ld: /home/hakon/perlbrew/perls/perl-5.24.1/lib/5.24.1/x86_64-linux/CORE/libperl.a(toke.o): 
    relocation R_X86_64_PC32 against symbol `PL_curcop' can not be used when making 
    a shared object; recompile with -fPIC 
/usr/bin/ld: final link failed: Bad value 
collect2: error: ld returned 1 exit status 

从错误信息,在我看来,该目标文件(这里:toke.olibperl.a编译时没有设置-fPIC标志。

我有这些问题现在:

  • 我怎样才能重新编译-fPIClibperl.a目标文件?
  • 难道这重新编译导致其他问题没有涉及到 QtCore4(因为很可能libperl.a将使用(由不涉及QtCore4其他应用程序/项目链接 用))?

我使用的是Ubuntu 16.10和perl版本5.24.1。

+1

[This](https://groups.google.com/forum/#!topic/perl.perl5.porters/-znN8wINCUI)可能会引起人们的兴趣,虽然它指的是HPUX,而不是Linux版本。 – hlt

回答

1

我怎样才能重新编译libperl.a目标文件与-fPIC

通过与-fPIC标志重新编译libperl.a。

./Configure -des -Accflags=-fPIC ... 

难道这重新编译的原因不涉及QtCore4其他问题(因为很可能libperl.a将使用(由不涉及QtCore4其他应用程序/项目含)链接)?

是的。选择一个共享的libperl。 -Duseshrplib

将perl嵌入到共享库中时需要哪一个。您可以避免使用ELF所需的-fPIC技巧,但共享libperl使其更容易。

+0

谢谢,这工作得很好。我使用了以下命令:'perlbrew install perl-5.24.1 --as perl-5.24.1 -PIC -Accflags = -fPIC'为测试目的保留单独的安装。 –

相关问题