2017-08-24 13 views
0

NixOSで使用するバイナリファイルをパッケージ化したいと思います。それを動作させるためには、patchelfによってインタープリターを変更して、nixストア内のものにリンクする必要があります。ここまでは順調ですね。バイナリもライブラリを共有しているが、私は続いpatchelfの--set-のrpathオプションを使用する場合、私は奇妙なエラーメッセージが表示されます:ライブラリー・パスの連結リスト:patchelfの後にLinuxの実行ファイルが動作しない

./result/bin/exe: ./result/bin/exe: no version information available (required by ./result/bin/exe) 
./result/bin/exe: ./result/bin/exe: no version information available (required by ./result/bin/exe) 
./result/bin/exe: ./result/bin/exe: no version information available (required by ./result/bin/exe) 
./result/bin/exe: ./result/bin/exe: no version information available (required by ./result/bin/exe) 
./result/bin/exe: ./result/bin/exe: no version information available (required by ./result/bin/exe) 
... 
./result/bin/exe: relocation error: ./result/bin/exe: symbol , version not defined in file with link time reference 

(私は繰り返し線の一部を削除します)

最初のエラーは問題ありません(リンクされたライブラリにはバージョン情報が含まれていませんが、実行可能ファイルは必要なバージョンを定義しています)。ライブラリが欠落しています。問題は次の行ですが、私はsimilar error messagesというgccの別のバージョンが問題を解決できる可能性がありますが、ライブラリ名が見つからないことを発見しました。私が使用するコマンドは、patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" --set-rpath /nix/store/qt-4.8.7/lib:/nix/store/zlib-1.2.11/lib:/nix/store/gcc-6.4.0-lib/lib:/nix/store/libSM-1.2.2/lib:/nix/store/libICE-1.0.9/lib:/nix/store/libX11-1.6.5/lib:/nix/store/libXext-1.3.3/lib:/nix/store/libXt-1.1.5/lib:/nix/store/mesa-17.1.6/lib exe(長いハッシュを削除したもの)です。

奇妙なことは、LD_LIBRARY_PATHをpatchelf(私はまだインタープリタを変更する必要がありますが、問題はありません)と同じことを設定するラッパーを作成することで実行できるということです。しかし、これは私が望む解決策ではありません。私は次に何をしようとすべきですか?

答えて

0

次に何をしようとしますか?

patchelfはバイナリを破損します。

その破損が何であるか把握し、patchelfにそのバグがないように修正する必要があります。

また、バイナリを再リンクできる場合は、適切なインタープリタを--dynamic-linker=...で指定し、RPATH--rpath=...リンカ引数で好きなように設定するだけです。

関連する問題