Lỗi Xcode 11 ld, nhị phân của bạn không phải là ứng dụng khách được phép của /usr/lib/libcrypto.dylibiến


8

Dự án của tôi sử dụng CMake để xây dựng, nhưng sử dụng phiên bản macOS cục bộ của clang và ld khi xây dựng trên máy Mac.

Sau khi nâng cấp lên Xcode 11 trên macOS 10.15 Catalina, tôi không thể liên kết với lỗi sau : ld: cannot link directly with dylib/framework, your binary is not an allowed client of /usr/lib/libcrypto.dylib for architecture x86_64.

Điều này có liên quan đến ứng dụng mới công chứng không? Có một bản sửa lỗi không yêu cầu dự án nằm trong Xcode (tôi sử dụng CLion để phát triển trên macOS) hoặc không yêu cầu liên kết bản dựng OpenSSL của riêng tôi?

Bất kỳ trợ giúp đánh giá cao.


Có vẻ như câu thơ trên twitter đề cập rằng điều này là 'bình thường'. Về cơ bản phiên bản bao gồm đã lỗi thời vì vậy bây giờ họ chỉ ngăn bạn liên kết với nó. Bất cứ ai có thể xác nhận hoặc từ chối bán chính thức? twitter.com/steipete/status/1168926846962020352
Damien Sirkis

Tự mình tìm hiểu vấn đề sáng nay và tìm hiểu kỹ, tôi tình cờ thấy thông báo trên diễn đàn Apple chỉ ra rằng Apple dự định các loại thư viện này chỉ được sử dụng trong nội bộ. Lời khuyên là hãy tự xây dựng thư viện của bên thứ ba và đưa chúng vào ứng dụng của bạn. forum.developer.apple.com/thread/124782
Casey

1
@casey Tôi nghĩ đó là câu trả lời đúng, như tôi đã nghi ngờ khi tìm thấy bài đăng trên twitter. Bạn có muốn đăng bài này như một câu trả lời và tôi sẽ chấp thuận nó?
Damien Sirkis

Câu trả lời:


3

Tôi đã cài đặt OpenSSL từ brew và find_packagedường như phát hiện phiên bản brew, nhưng nó cố gắng liên kết liên kết dự án với OpenSSL được cài đặt trong hệ thống, đó là LibreSSL.

Tôi đã cố gắng buộc find_packagethiết lập đường dẫn chính xác của thư viện, nhưng nó không làm gì cả:

if(APPLE)
    set(OPENSSL_ROOT_DIR /usr/local/Cellar/openssl@1.1/1.1.1d/)
endif()

Vì vậy, tôi đã kết thúc bằng cách thiết lập các phụ thuộc bằng tay, điều này không lý tưởng nhưng nó hoạt động trong thời gian chờ đợi để phát triển.

# OpenSSL
find_package(OpenSSL REQUIRED)
if(OPENSSL_FOUND)
    if(APPLE)
        include_directories(/usr/local/Cellar/openssl@1.1/1.1.1d/include)
        list(APPEND LIB_LIST /usr/local/Cellar/openssl@1.1/1.1.1d/lib/libssl.dylib)
        list(APPEND LIB_LIST /usr/local/Cellar/openssl@1.1/1.1.1d/lib/libcrypto.dylib)
        message(STATUS "OpenSSL Version: ${OPENSSL_VERSION} ${OPENSSL_INCLUDE_DIR} ${OPENSSL_LIBRARIES}")
    else()
        include_directories(${OPENSSL_INCLUDE_DIR})
        list(APPEND LIB_LIST ${OPENSSL_LIBRARIES})
        message(STATUS "OpenSSL Version: ${OPENSSL_VERSION} ${OPENSSL_INCLUDE_DIR} ${OPENSSL_LIBRARIES}")
    endif()
endif()

Đầu ra Cmake cung cấp thông tin này, nơi nó phát hiện thư viện OpenSSL từ brew, nhưng liên kết với thư viện hệ thống. Không chắc chắn lý do tại sao.

-- OpenSSL Version: 1.1.1d /usr/local/Cellar/openssl@1.1/1.1.1d/include /usr/lib/libssl.dylib;/usr/lib/libcrypto.dylib

Hy vọng điều này giúp đỡ!


Xin chào, tôi bối rối không biết mình cần chỉnh sửa tập tin nào để thực hiện những thay đổi này. Cảm ơn nhiều!
mikejw

1

Trang này đã giúp tôi giải quyết vấn đề OpenSSL: https://gist.github.com/llbbl/c54f44d028d014514d5d837f64e60bac

Xem thêm trang này: https://forums.developer.apple.com/thread/119429


1
Mặc dù liên kết này có thể trả lời câu hỏi, tốt hơn là bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi.
Agilanbu

1
Cảm ơn câu trả lời, Thật không may, nó dường như liên quan đến một vấn đề khác, đó là một ngoại lệ khi liên kết đến một libcrypto chưa được đảo ngược trong thời gian chạy. Tôi sẽ nói thêm rằng giải pháp được cung cấp có thể hoạt động để phát triển nhưng không rõ ràng đối với người dùng cuối vì nó yêu cầu sửa đổi máy khách để ứng dụng chạy, đây không phải là thứ bạn có thể yêu cầu một cách hợp lý từ người dùng ứng dụng.
Damien Sirkis

0

Tự mình tìm hiểu vấn đề sáng nay và tìm hiểu kỹ, tôi tình cờ thấy thông báo trên diễn đàn Apple chỉ ra rằng Apple dự định các loại thư viện này chỉ được sử dụng trong nội bộ. Lời khuyên là hãy tự xây dựng thư viện của bên thứ ba và đưa chúng vào ứng dụng của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.