bazel

2017-05-02 9 views
1

でカスタムのglibcを使用して、私は非ルート(Debianの)環境にいると私はbazel

Failed to open library! - ./libdmlab.so 
dlopen: cannot load any more object with static TLS 

を得たバイナリをコンパイルするとき、私は、これはやや一般的な問題であることを学んだと増やすことでglibc/2.21.1で回避されました限界。私は今、glibcの新しいバージョン(2.22)をローカルにインストールしようとしており、bazelでそれを使ってリンクしています。

ソースからglibcをコンパイルし、PATH,CPATHLIBRARY_PATHに適切なものを追加しました。 glibc/libLD_LIBRARY_PATHに追加すると、lddがsegfaultになりました。

ローカルにインストールされたglibcをbazelで使用することの問題があります。 this answerで説明したように

bazel run --linkopt "-Wl,--rpath=/u/sygnowsj/bin/glibc -Wl,--dynamic-linker=/u/sygnowsj/bin/glibc/lib/ld-linux-x86-64.so.2" run //target 

が、それは何も変更しませんでした:私はと-linkeropt(同様に-copt)を使用して試してみました。私はまた、BUILDファイルに問題のあるライブラリーのlinkeropts

"-Wl,--rpath=/u/sygnowsj/bin/glibc", 
"-Wl,--dynamic-linker=/u/sygnowsj/bin/glibc/lib/ld-linux-x86-64.so.2", 

を追加しようとしたが、それはどちらか助けていません。

をすべてのターゲットでglibcのバージョンにリンクさせるにはどうすればよいですか?静的なTLS制限を打つという問題を回避する方法はありますか?

答えて

1

bazel run --linkopt "-Wl,--rpath=/u/sygnowsj/bin/glibc -Wl,--dynamic-linker=/u/sygnowsj/bin/glibc/lib/ld-linux-x86-64.so.2" run //target

これは右見ていない:あなたはそこに2 run秒を持っています。また、単一の-Wl,--rpath...ld-linux-x86-64.so.2引数をリンカーに渡しても、あなたが望むことはしません。

--linkopt=-Wl,--rpath=/u/sygnowsj/bin/glibc \ 
--linkopt=-Wl,--dynamic-linker=/u/sygnowsj/bin/glibc/lib/ld-linux-x86-64.so.2 

か:あなたは、どちらかの必要

--linkopt=-Wl,--rpath=/u/sygnowsj/bin/glibc,--dynamic-linker=/u/sygnowsj/bin/glibc/lib/ld-linux-x86-64.so.2 

最後に、あなたの--rpath値:/u/sygnowsj/bin/glibcが間違って見えます。可能なはずです:

-Wl,--rpath=/u/sygnowsj/bin/glibc/lib 

(これはあなたのld-linuxの場所です)。

+0

ありがとうございます。私はglibcと正しくリンクしていたことが判明しましたが、エラーは別の場所に置かれていました。 – sygi

関連する問題