2017-04-04 19 views
4

この問題は、installation problemsQtCore4に修正しようとしたときに発生しました。リンカから次のエラーメッセージで失敗しました-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 

は、それが(オブジェクトファイルと私には思われるいくつかの点でmakeは、次のコマンドを実行しようとしましたここでは:toke.o)の libperl.a-fPICフラグが設定されていません。私が今持っている

質問は以下のとおりです。

  • 私は-fPIClibperl.aにオブジェクトファイルを再コンパイルするにはどうすればよいですか?
  • この再コンパイルは(QtCore4に関連しない他のアプリケーション/プログラムによってlibperl.aが使用される可能性があるので、(と をリンク)) QtCore4に関連しない他の問題を引き起こす可能性が?

私はUbuntu 16.10とperl version 5.24.1を使用しています。

+1

[This](https://groups.google.com/forum/#!topic/perl.perl5.porters/-znN8wINCUI)は興味深いかもしれませんが、LinuxビルドではなくHPUXを指しています。 – hlt

答えて

1

は、どのように私は-fPICフラグでlibperl.a再コンパイルすることで-fPIC

でlibperl.aでオブジェクトファイルを再コンパイルすることができます。

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

この再コンパイルは、(libperl.aがQtCore4に関連しない他のアプリケーション/プログラムによって)とリンク(使用される可能性があるため)QtCore4に関連しない他の問題を引き起こす可能性が?

はい。共有libperlを推奨します。 -Duseshrplib

これは、perlを共有ライブラリに埋め込む場合に必要となるものです。 ELF上で必要な-fPICトリックを削除することはできますが、共有されているlibperlを使うともっと簡単になります。

+0

ありがとう、これはうまくいきました。私は次のコマンドを使用しました: 'perlbrew install perl-5.24.1 --as perl-5.24.1-PIC -Accflags = -fPIC' –

関連する問題