Próbuję połączyć Andi Kleen's glibc implementation, aby włączyć blokadę dla programu z pthreads. połączyć mój program w następujący sposób:Łącze z innym niż domyślnym glibc
g++ \
-Wl,--rpath=/path/glibc-elision/build/lib \
-Wl,--dynamic-linker=/path/glibc-elision/build/lib/ld-linux-x86-64.so.2 \
-o program program.o \
-fgnu-tm -mrtm -pthread \
-Wl,--no-as-needed --enable-lock-elision=yes
Dopóki nie używam żadnych składników libstdC++, wszystko działa bez zarzutu.
Ale tak szybko, jak np. std::vector
jest przywoływany, dynamiczny linker nie może znaleźć libstdC++. So.6 (error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
).
Aby rozwiązać ten problem, próbowałem podać zarówno niestandardowy, jak i standardowy glibc z -Wl,--rpath=/path/glibc-elision/build/lib;/usr/lib/x86_64-linux-gnu/libstdc++.so.6
. To nie jest poprawne połączenie, ale chodzi o to, aby zapewnić obie biblioteki.
Więc pytanie brzmi:
Jak połączyć program przed różnymi składnikami dwóch glibcs?
Pracuję nad Ubuntu 13.10 z gcc (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1.
To brzmi jak twój nowy ld-linux-x86-64.so.2 nie może znaleźć środowiska uruchomieniowego C++ ... Jako szybki test możesz spróbować ustawić zmienną środowiskową 'LD_LIBRARY_PATH' na'/usr/lib64'. – Nemo
Tak, wydaje się, że to właściwe podejście: zamiast błędu 'libstdC++. So.6' pojawia się błąd, że' libgcc_s.so.1' nie może zostać znaleziony (co oznacza, że 'libstdC++. So.6' był uznany). – mschrimpf