2017-05-02 3 views
1

(데비안) 환경의 glibc와 바이너리를 컴파일 할 때 나는사용하여 사용자 정의 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를 사용하는 것에 대한 질문이 왔습니다. 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 

,하지만 아무것도 변경하지 않은 : 나는 (물론 -copt 등)로 -linkeropt를 사용하여 시도했다. 나는 또한 BUILD 파일에 문제가있는 라이브러리의 linkeropts

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

를 추가했지만, 그것은 도움이되지 않았다.

모든 타겟에 대해 glibc의 내 버전에 대해 bazel 링크를 만들려면 어떻게해야합니까? 다른 방법으로 정적 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

이 잘 보이지 않는 : 당신이 거기에 두 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