Tôi có hai phiên bản GCC được cài đặt trên hệ thống 4.6.2 và 4.7.0 của tôi. Tôi đang chạy Fedora Core 16.GCC Không liên kết các thư viện chính xác
4.6.2 được cài đặt trong /usr/bin
và 4.7.0 được cài đặt trong /home/nerozehl/local/bin
. Các thư viện và thời gian chạy cho C++ cũng được biên dịch và cài đặt trong /home/nerozehl/local/lib
và /home/nerozehl/local/lib64
.
Tôi cũng có hai phiên bản Boost được cài đặt, với thư viện ở /usr/lib64
và /home/nerozehl/local/lib
. (Tăng 1.47.0 và 1.49.0, tương ứng)
Vấn đề tôi gặp phải là g ++/ld đang liên kết với các thư viện mặc định chứ không phải các thư mới hơn trong /home/nerozehl/local
. Tôi đang sử dụng configure
để tạo Makefiles, và đang kêu gọi nó theo cách này:
CXX=g++47 CXXFLAGS="-g -O0 -pg" LDFLAGS="-L/home/nerozehl/local/lib" ./configure --prefix=/home/nerozehl/local
đâu g++47
nằm trong /home/nerozehl/local/bin
(trong $PATH
của tôi).
Khi tôi biên dịch, mọi thứ đều tốt, và các tiêu đề mới được sử dụng, nhưng khi tôi kiểm tra những gì nó được liên kết chống lại:
ldd source/noes
linux-vdso.so.1 => (0x00007fffebfff000)
libboost_filesystem-mt.so.1.47.0 => /usr/lib64/libboost_filesystem-mt.so.1.47.0 (0x0000003c6a800000)
libboost_system-mt.so.1.47.0 => /usr/lib64/libboost_system-mt.so.1.47.0 (0x0000003c6a400000)
libboost_program_options-mt.so.1.47.0 => /usr/lib64/libboost_program_options-mt.so.1.47.0 (0x0000003c6ac00000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000003c6dc00000)
libm.so.6 => /lib64/libm.so.6 (0x0000003c68c00000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003c69c00000)
libc.so.6 => /lib64/libc.so.6 (0x0000003c68800000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003c69000000)
librt.so.1 => /lib64/librt.so.1 (0x0000003c69800000)
/lib64/ld-linux-x86-64.so.2 (0x0000003c68400000)
Đối với cuộc sống của tôi, tôi không thể tìm ra cách để buộc g ++/ld/configure để sử dụng các thư viện mới hơn của tôi. Bất kỳ trợ giúp sẽ được đánh giá cao.
+1 để sử dụng ldd – pyCthon
Bạn nên kiểm tra tùy chọn '-v' cách đường dẫn tìm kiếm thư viện hiện tại trông như thế nào: khi liên kết g ++ sẽ hiển thị thư mục nào sẽ tìm kiếm và theo thứ tự nào. Để tránh sự cố, hãy thử chuyển đường dẫn mong muốn bằng tùy chọn '-L'. Tôi đoán là nó tìm kiếm các đường dẫn chuẩn trước đường dẫn cục bộ trong các thư mục bổ sung. –
Tôi đang sử dụng -L/home/nerozehl/local/lib – nerozehl