2011-07-18 40 views
11

Tôi đã cài đặt gcc 4.6 bằng macports. Tiền tố là /opt/local, và tôi nhận được dự kiến ​​sẽ bao gồm đường dẫn:gcc trên Mac OS X: cách liên kết các thư viện được cài đặt với MacPorts?

#include "..." search starts here: 
#include <...> search starts here: 
/opt/local/include/gcc46/c++/ 
/opt/local/include/gcc46/c++//x86_64-apple-darwin10 
/opt/local/include/gcc46/c++//backward 
/opt/local/lib/gcc46/gcc/x86_64-apple-darwin10/4.6.1/include 
/opt/local/include 
/opt/local/lib/gcc46/gcc/x86_64-apple-darwin10/4.6.1/include-fixed 
/usr/include 
/System/Library/Frameworks 
/Library/Frameworks End of search list. 

Tuy nhiên, /opt/local/lib dường như không có trong đường dẫn tìm kiếm thư viện, vì vậy tôi phải xác định nó với -L/opt/local/lib khi sử dụng g ++ trên dòng lệnh:

Library search paths: 
    /opt/local/lib/gcc46/gcc/x86_64-apple-darwin10/4.6.1 
    /opt/local/lib/gcc46 
    /usr/lib 
    /usr/local/lib 
Framework search paths: 
    /Library/Frameworks/ 
    /System/Library/Frameworks/ 

Đây là vấn đề đối với các thư viện khác được cài đặt với macports. Có cách nào dễ dàng để thêm /opt/local/lib vào đường dẫn tìm kiếm trong thư viện không? Tôi đã thử đặt DYLD_LIBRARY_PATH thành vô ích. Tôi đang sử dụng Mac OS X 10.6.8.

+0

'DYLD_LIBRARY_PATH' dành cho tải động tại thời gian chạy, không phải thời gian biên dịch. – Dani

Trả lời

2

Nó phụ thuộc nếu bạn muốn liên kết động hoặc tĩnh thực thi của bạn với thư viện. Dưới OS X bạn thêm các thư viện như file nguồn/đối tượng như thế này:

Dynamic: g++ -Wall -o myexecutable myfile.cpp /path/to/library.dylib 
Static: g++ -Wall -o myexecutable myfile.cpp /path/to/library.a 

Cách tốt nhất là sử dụng một hệ thống xây dựng, ví dụ CMake (có thể được cài đặt từ macports). Và giúp bạn dễ dàng tìm thấy thư viện, tạo thư viện theo cách đa nền tảng.

+1

Câu hỏi của tôi là thêm về cách đặt '/ opt/local/lib' trong đường dẫn tìm kiếm trong thư viện của gcc. Gcc được xây dựng trong/opt/local vì vậy tôi mong đợi nó là int anh ta tìm kiếm con đường nhưng nó không phải là. – juanchopanza

7

trong ~/.profile thêm dòng sau:

export LDFLAGS="-L/opt/local/lib" 

và chạy source ~/.profile tại nhà ga để tải lại hồ sơ của bạn.

Bằng cách này, chuyển đổi -L sẽ được phát hiện từ gcc/g ++ và tự động được sử dụng.

+0

Bạn đang xây dựng như thế nào? Nếu tôi chỉ sử dụng dòng lệnh g ++, biến môi trường này không có hiệu lực. – juanchopanza

+2

biến LIBRARY_PATH nên được sử dụng, không có "-L" – hbogert

Các vấn đề liên quan