Nếu bạn đã liên kết với thư viện .a
, thì bạn đã liên kết tĩnh. Bạn không bao giờ cần gửi các thư viện .a
. Chúng chỉ là các đối tượng.
EDIT: lỗi của bạn mạnh mẽ cho thấy rằng bạn đang liên kết các dylib chứ không phải là .a. Nếu bạn có libfoo.dylib
và libfoo.a
trong đường dẫn thư viện của mình, ngay cả khi bạn nói "liên kết libfoo.a
" trong Xcode và thậm chí nếu libfoo.a
trước đó trong đường dẫn tìm kiếm, nó vẫn sẽ liên kết libfoo.dylib
. Điều này là do liên kết của Xcode hoàn toàn bị hỏng và chuyển -lfoo
đến trình liên kết (bạn không bao giờ nên sử dụng -l
cho thứ gì đó bạn đã tạo và có đường dẫn chính xác đến). Tôi luôn khuyên bạn nên liên kết các thư viện bạn đã tạo trong LDFLAGS
trong tệp xcconfig thay vì sử dụng ngăn xây dựng. Bạn vượt qua đường dẫn chính xác mà bạn muốn thay vì sử dụng -l
. Xem Abandoning the Build Panel để biết thêm suy nghĩ của tôi về xcconfig. Nó đã lỗi thời, vì nó được viết cho Xcode3, nhưng những điều cơ bản vẫn được áp dụng.
Sử dụng ngăn xây dựng, bạn cũng có thể chuyển toàn bộ đường dẫn đến thư viện trong "Cờ liên kết khác". Nhưng điều này vẫn có tất cả các vấn đề của cửa sổ xây dựng.
Giải pháp nhanh hơn (nhưng kém mạnh hơn) đôi khi thêm -Wl,-search_paths_first
vào "Cờ liên kết khác". Điều này thay đổi hành vi sao cho mỗi đường dẫn thư viện được tìm kiếm cho cả .dylib
và .a
trước khi tiếp tục (hành vi mặc định là tìm kiếm ở mọi nơi cho .dylib
và chỉ sau đó tìm kiếm .a
). Vì vậy, nếu .a
của bạn nằm trong một thư mục khác từ .dylib
và thư mục đó trước đó trong đường dẫn tìm kiếm, thư mục này sẽ hoạt động.
Câu hỏi này cuối cùng đã giúp tôi mở một số radar về vấn đề này, điều mà tôi nên làm từ nhiều năm trước. Tôi khuyên những người khác mở duplicates.
Nguồn
2012-03-06 15:47:57
Đó là những gì tôi nghĩ mặc dù khi cố chạy ứng dụng trên một máy tính khác, ứng dụng sẽ không chạy và có lỗi nói rằng nó không thể định vị tệp .dylib có liên quan. Các tệp .a có nên được liên kết với dự án ở một nơi khác ngoài phần 'Liên kết nhị phân với thư viện' không? –
"Sử dụng ngăn xây dựng, bạn cũng có thể chuyển toàn bộ đường dẫn đến thư viện trong" Các Cờ Liên kết Khác "- điều này đã giải quyết được vấn đề. –