Cách sửa lỗi 'dyld: Library not loaded' trên macOS: Hướng dẫn về OpenSSL và Thư viện chia sẻ

intermediate🍎 macOS2026-04-05| macOS (Intel hoặc Apple Silicon), Homebrew, các ứng dụng nền Terminal, môi trường Python/Ruby/Node.js.

Error Message

dyld: Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib Referenced from: /usr/local/bin/wget Reason: image not found
#dyld#loi-macos#openssl#sua-loi-homebrew#terminal#dylib

Tại sao lỗi này lại xảy ra?

Nếu bạn từng thấy thông báo dyld: Library not loaded, nghĩa là bạn đã gặp phải trình liên kết động (dynamic linker) của macOS. Lỗi này xảy ra khi một ứng dụng cố gắng mở một thư viện chia sẻ (tệp .dylib) bị thiếu trong đường dẫn dự kiến của nó. Đây là một vấn đề gây khó chịu thường gặp đối với các nhà phát triển sử dụng Homebrew. Thông thường, nó xảy ra ngay sau khi thực hiện brew upgrade hoặc một bản cập nhật macOS lớn.

Lỗi này thường hiển thị như sau trong terminal của bạn:

dyld: Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
  Referenced from: /usr/local/bin/wget
  Reason: image not found

Trong ví dụ này, wget đang tìm kiếm OpenSSL 1.0.0. Tuy nhiên, Homebrew có thể đã cập nhật hệ thống của bạn lên OpenSSL 3.0 và xóa các tệp 1.0.0 cũ hơn để tiết kiệm dung lượng. Điều này khiến các công cụ cũ của bạn không thể hoạt động.

Bước 1: Truy tìm Dependency bị lỗi

Đầu tiên, bạn cần xác nhận chính xác thư viện nào đang bị thiếu. Đừng đoán mò. Bạn có thể sử dụng lệnh otool để kiểm tra bên trong tệp nhị phân (binary) đang bị lỗi và xem các yêu cầu của nó.

otool -L /usr/local/bin/wget

Lệnh này sẽ in ra mọi thư viện chia sẻ mà ứng dụng phụ thuộc vào. Hãy quét danh sách để tìm các đường dẫn liên quan đến /usr/local/opt/openssl/ hoặc /opt/homebrew/opt/. Nếu một tệp được liệt kê ở đó không tồn tại trên ổ cứng của bạn, bạn đã tìm thấy nguyên nhân gây ra lỗi crash.

Bước 2: Cách khắc phục tốt nhất — Cài đặt lại phần mềm

Giải pháp sạch sẽ nhất là buộc ứng dụng nhận diện các thư viện mới hơn của bạn. Việc cài đặt lại phần mềm thông qua Homebrew sẽ kích hoạt quá trình liên kết lại (re-link), thường sẽ trỏ ứng dụng đến đúng phiên bản OpenSSL hoặc các dependency khác.

Làm mới Homebrew

brew update
brew upgrade

Cài đặt lại ứng dụng

Nếu wget hoặc postgres là ứng dụng gây ra lỗi, hãy chạy lệnh cài đặt lại:

brew reinstall wget

Đôi khi một ứng dụng yêu cầu cụ thể một phiên bản OpenSSL cũ hơn mà Homebrew không còn cài đặt theo mặc định. Nếu lỗi vẫn tiếp diễn, bạn có thể thử cài đặt phiên bản tương thích 1.1:

brew install openssl@1.1

Bước 3: Sử dụng Symlink như giải pháp cuối cùng

Bạn có thể bị kẹt với một công cụ độc quyền hoặc môi trường Python 3.7 cũ mà không thể dễ dàng cài đặt lại. Trong những tình huống ngặt nghèo này, bạn có thể đánh lừa hệ thống bằng cách tạo một liên kết biểu tượng (symbolic link). Điều này trỏ đường dẫn cũ mà ứng dụng muốn đến tệp thư viện mới mà bạn thực sự có.

Thận trọng: Đây chỉ là một biện pháp tạm thời. Nếu phiên bản thư viện mới có những thay đổi đáng kể, ứng dụng có thể bị crash với lỗi Symbol not found sau này.

# Ánh xạ phiên bản 1.1 tới đường dẫn 1.0.0 cũ
ln -s /usr/local/opt/openssl/lib/libssl.1.1.dylib /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
ln -s /usr/local/opt/openssl/lib/libcrypto.1.1.dylib /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib

Hãy nhớ rằng các máy Mac Apple Silicon (M1, M2, M3) sử dụng /opt/homebrew làm đường dẫn cơ sở, trong khi máy Mac Intel sử dụng /usr/local. Hãy kiểm tra kỹ đường dẫn của bạn trước khi chạy các lệnh này.

Bước 4: Điều chỉnh đường dẫn môi trường toàn cục

Nếu tệp thư viện có tồn tại nhưng hệ thống đơn giản là không thể nhìn thấy nó, bạn có thể cần cập nhật profile của shell. Thêm đường dẫn thư viện vào .zshrc hoặc .bash_profile để giúp macOS tìm thấy nó.

export DYLD_LIBRARY_PATH="/usr/local/opt/openssl/lib:$DYLD_LIBRARY_PATH"

Sau khi lưu tệp, hãy làm mới terminal bằng cách chạy lệnh source ~/.zshrc.

Cách xác nhận lỗi đã được khắc phục

Hãy thử chạy lại ứng dụng của bạn. Nếu nó khởi động mà không có thông báo dyld, bạn đã giải quyết xong. Để yên tâm hơn, hãy chạy otool một lần cuối:

otool -L /usr/local/bin/wget

Xác minh rằng các đường dẫn được liệt kê hiện đã khớp với các tệp thực sự tồn tại trong hệ thống tệp của bạn.

Bảo mật và tính toàn vẹn của tệp

Khi bạn di chuyển các tệp thư viện theo cách thủ công hoặc tải chúng từ các nguồn bên thứ ba để sửa những lỗi này, bạn có nguy cơ tạo ra các lỗ hổng bảo mật. Một tệp .dylib bị hỏng hoặc bị can thiệp có thể làm tổn hại toàn bộ môi trường phát triển của bạn.

Các nhà phát triển chuyên nghiệp thường sử dụng Hash Generator để xác minh tính toàn vẹn của thư viện. Bằng cách kiểm tra mã checksum SHA-256 của một thư viện so với tài liệu chính thức, bạn đảm bảo tệp đó an toàn và không bị can thiệp. Việc kiểm tra mất 30 giây này có thể ngăn chặn những rắc rối lớn về bảo mật về sau.

Những lưu ý quan trọng

  • Cập nhật Homebrew: Việc chạy brew upgrade thường làm hỏng các công cụ cũ bằng cách xóa các phiên bản thư viện cụ thể mà chúng cần.
  • Kiến trúc bộ vi xử lý: Luôn xác minh xem bạn đang dùng Intel (/usr/local) hay Apple Silicon (/opt/homebrew). Các đường dẫn này không thể thay thế cho nhau.
  • Ưu tiên cài đặt lại: Cài đặt lại ứng dụng luôn an toàn hơn so với việc tạo symlink. Symlink rất mong manh và có thể gây ra những hành vi không lường trước được nếu cấu trúc nội bộ của thư viện đã thay đổi.

Related Error Notes