Bạn không thể đặt trực tiếp dylib vào bên trong tệp thi hành. (Đó là khá nhiều những gì được phát minh cho - nhưng điều đó không giúp bạn với các công cụ dòng lệnh.)
Bạn có thể xây dựng lại mỗi thư mục như một thư viện tĩnh (.a). nhu cầu sẽ được sao chép vào tệp thực thi và bạn không cần phải phân phối bất kỳ thứ gì với nó. Nếu bạn đã có nguồn cho các thư viện, điều này thường rất dễ dàng - nhưng không biết chính xác cách bạn đang xây dựng mọi thứ, thật khó để cho bạn biết những gì cần thay đổi.
Một điều cần ghi nhớ với liên kết tĩnh là nó ảnh hưởng đến cách các giấy phép khác nhau phát cùng nhau. Đặc biệt, nếu bất kỳ thư viện nào bạn đang sử dụng được cấp phép LGPL, liên kết tĩnh chúng có những hậu quả mà liên kết động không. Xem this question (và các liên kết trên câu trả lời) để biết thêm chi tiết, nhưng thực sự, bạn không nên tin tưởng câu trả lời trên Stack Overflow để được tư vấn pháp lý về giấy phép. Dù sao, đó có lẽ không phải là một vấn đề cho OP của "Tôi muốn xây dựng một chương trình và đưa nó cho bạn của tôi", nhưng đối với những người khác đọc câu hỏi này sau, nó có thể được.
Nếu liên kết tĩnh là không thể hoặc mong muốn, tất cả những gì bạn cần làm là gói các tập tin thực thi và dylib lại với nhau và đưa chúng vào máy của bạn bè. Vì anh ta dường như không muốn chạy trình cài đặt, điều đó có nghĩa là tarball hoặc zipfile.
Phần khó khăn nhất là đảm bảo exe biết nơi để tìm các dylibs. Trừ khi mỗi dylib nằm trong đường dẫn tìm kiếm dyld (xem manpage cho dyld để biết thêm chi tiết, nhưng nó sẽ không giúp bạn nếu bạn không muốn cài đặt bất cứ thứ gì), hoặc ở cùng một nơi chính xác vào thời điểm bạn liên kết nó, chạy thực thi sẽ thất bại với một lỗi "hình ảnh không tìm thấy" từ dyld.
May mắn thay, "cùng một địa điểm" có thể có nghĩa là đường dẫn ma thuật như "@ executable_path/libfoo.dylib", có nghĩa là "trong cùng thư mục với myexe", chứ không phải đường dẫn tuyệt đối như "/ opt/local/lib /libfoo.dylib "hoặc đường dẫn tương đối như" ../../foo/build/Release/libfoo.dylib ".(Lưu ý rằng đường dẫn tương đối bình thường có liên quan đến thư mục làm việc hiện hành, không thực thi hoặc thư mục bó.)
Bạn có thể thấy nơi myexe đang tìm kiếm bằng cách làm này:
otool -L myexe
Bất cứ điều gì mà không nhìn vào @ executable_path (trừ thứ trong/lib và/usr/lib, là một phần của hệ điều hành và không cần phải được phân phối), bạn có thể khắc phục như thế này:
install_name_tool -change ../../../mydl/build/Release/libmydl.dylib @executable_path/libmydl.dylib myexe
Bây giờ, bạn chỉ cần sao chép tất cả những dylibs ngay bên cạnh myexe, tar nó lên, và đưa nó cho bạn của bạn, và anh ta có thể bỏ nó và chạy exe.
Bạn có thể chấp nhận câu trả lời của abarnert không? Điều đó sẽ giúp người khác tìm thấy nó. Nó rất hữu ích cho tôi. – Yitz
Xong. Xin lỗi về sự chậm trễ. – Olie