2013-04-05 37 views
14

Tôi đang cố gắng tìm ra cách thiết lập một số biến môi trường mà có thể làm cho g ++ liên kết đến đúng phiên bản của các thư viện.GCC cách thêm trước đường dẫn tìm kiếm trình liên kết mặc định theo mặc định? LIBRARY_PATH không hoạt động

Tôi có một số thư viện tăng cũ trong/usr/lib64 (liên kết với những lỗi này sẽ không thành công) và thư viện mới trong/v/users/regel/lib. Vì vậy, mối liên kết nên liên kết với các thư viện mới.

Command:

$ g++ test.cpp -lboost_system -L/v/users/regel/lib 

liên kết các chương trình một cách chính xác. Tuy nhiên, tôi muốn đặt thư mục này làm thư mục tìm kiếm số 1 cho trình liên kết để tôi không phải chỉ định '-L' mỗi khi tôi liên kết.

Các biến môi trường sau đây dường như không làm các trick:

$ LIBRARY_PATH=/v/users/regel/lib g++ test.cpp -lboost_system 
/tmp/regel/cc4SmBtI.o: In function `main': 
test.cpp:(.text+0x5): undefined reference to `boost::system::system_category()' 
collect2: error: ld returned 1 exit status 

$ LD_LIBRARY_PATH=/v/users/regel/lib:$LD_LIBRARY_PATH g++ test.cpp -lboost_system 
/tmp/regel/ccUreBZy.o: In function `main': 
test.cpp:(.text+0x5): undefined reference to `boost::system::system_category()' 
collect2: error: ld returned 1 exit status 

Mặc dù đọc rất nhiều bài báo và bài viết về các chủ đề tương tự, tôi đã không tìm thấy một giải pháp được nêu ra.

+0

Bạn đã thử đặt + xuất LD_LIBRARY_PATH trước khi chạy g ++ (thay vì cung cấp nó trên dòng lệnh g ++)? –

+0

Tôi đã thử xuất cả LIBRARY_PATH và LD_LIBRARY_PATH trước khi chạy g ++. – Regel

+0

@FrankSchmitt, thiết lập nó theo cách OP đã có tác dụng tương tự như xuất khẩu nó (nhưng giới hạn trong lệnh đó và các con của nó) vì vậy nó sẽ không giúp đỡ –

Trả lời

6

Khi hướng dẫn GCC says, LIBRARY_PATH là biến môi trường chính xác để thêm thư mục vào đường dẫn tìm kiếm thư viện.

Nếu bạn thêm -v để lệnh g++ bạn sẽ thấy LIBRARY_PATH mà nó sử dụng, và bạn sẽ thấy nó bao gồm các thư mục mà bạn đã chỉ định, và rằng nó được thêm vào lệnh collect2 như -L, nhưng bạn sẽ thấy nó được thêm sau các thư mục tiêu chuẩn như -L/usr/lib, vv

tôi không biết cách nào để làm cho các thư mục trong LIBRARY_PATH đến trước, tôi nghĩ rằng bạn phải sử dụng -L cho điều đó.

+2

Tại sao câu trả lời này được chấp nhận?Nó không trả lời câu hỏi. –

-1

Cố gắng xác định đường dẫn thư viện trong một file conf trong /etc/ld.so.conf.d/

Các mối liên kết nhìn vào những con đường được quy định trong các tập tin trong /etc/ld.so.conf.d/ trong khi liên kết.

Đảm bảo bạn chạy 'ldconfig' khi bạn tạo tệp, điều này sẽ buộc tệp cập nhật bộ nhớ cache của tệp.

+5

Tôi tin rằng bạn đang nói về bộ tải (ld.so) và không phải là trình liên kết (ld). –

+0

Tại sao câu trả lời này quá nhiều "được sử dụng"? Khi tôi làm strace trên gcc nhị phân, tôi có thể thấy tập tin /etc/ld.so.conf được đọc (thường bao gồm ld.so.conf.d/*. Conf). – Kuchara