Tôi đang cố gắng liên kết Andi Kleen's glibc implementation để bật tính năng khóa-elision cho chương trình có pthread. tôi liên kết chương trình của tôi như sau:Liên kết với glibc không mặc định
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
Chừng nào tôi không sử dụng bất kỳ thành phần của libstdC++, tất cả mọi thứ hoạt động tốt.
Nhưng ngay sau đó, ví dụ: std::vector
được tham chiếu, liên kết động không thể tìm thấy libstdC++. So.6 (error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
).
Để giải quyết lỗi này, tôi đã cố gắng cung cấp tùy chỉnh cũng như glibc chuẩn với -Wl,--rpath=/path/glibc-elision/build/lib;/usr/lib/x86_64-linux-gnu/libstdc++.so.6
. Đây không phải là cuộc gọi chính xác nhưng ý tưởng là bằng cách nào đó cung cấp cả hai thư viện.
Vì vậy, câu hỏi là:
Làm thế nào để liên kết một chương trình chống lại các thành phần khác nhau của hai glibcs?
Tôi đang làm việc trên Ubuntu 13.10 với gcc (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1.
Điều này nghe giống như ld-linux-x86-64.so.2 mới của bạn không thể tìm thấy thời gian chạy C++ ... Như kiểm tra nhanh, bạn có thể thử đặt biến môi trường 'LD_LIBRARY_PATH' thành'/usr/lib64'. – Nemo
Có vẻ như đó là cách tiếp cận đúng: thay vì lỗi 'libstdC++. So.6', tôi nhận được lỗi rằng' libgcc_s.so.1' không thể tìm thấy (cho biết 'libstdC++. So.6' là tìm). – mschrimpf