Xcode 11 ld Fehler "Ihre Binärdatei ist kein zulässiger Client von /usr/lib/libcrypto.dylib"

8

Mein Projekt verwendet CMake zum Erstellen, verwendet jedoch die lokale macOS-Version von clang und ld, wenn auf einem Mac erstellt wird.

Nach dem Upgrade auf Xcode 11 unter macOS 10.15 Catalina kann keine Verbindung mit dem folgenden Fehler hergestellt werden : ld: cannot link directly with dylib/framework, your binary is not an allowed client of /usr/lib/libcrypto.dylib for architecture x86_64.

Hängt dies mit der Beglaubigung der neuen App zusammen? Gibt es einen Fix, für den das Projekt nicht in Xcode enthalten sein muss (ich verwende CLion für die Entwicklung unter macOS) oder für den keine Verknüpfung meines eigenen OpenSSL-Builds erforderlich ist?

Jede Hilfe geschätzt.

Damien Sirkis
quelle
Es sieht so aus, als würde der Twitter-Vers erwähnen, dass dies "normal" ist. Grundsätzlich war die enthaltene Version veraltet, sodass Sie jetzt nur noch daran gehindert werden, darauf zu verlinken. Kann jemand halboffiziell bestätigen oder ablehnen? twitter.com/steipete/status/1168926846962020352
Damien Sirkis
Als ich heute Morgen selbst auf dieses Problem gestoßen bin und mich umgesehen habe, bin ich auf diese Apple-Forum-Nachricht gestoßen, die darauf hinweist, dass Apple beabsichtigt, diese Arten von Bibliotheken nur intern zu verwenden. Es wird empfohlen, Bibliotheken von Drittanbietern selbst zu erstellen und in Ihre Anwendung aufzunehmen. forums.developer.apple.com/thread/124782
Casey
1
@casey Ich denke, das ist die richtige Antwort, wie ich vermutet habe, als ich den Twitter-Beitrag gefunden habe. Möchten Sie dies als Antwort posten und ich werde es genehmigen?
Damien Sirkis

Antworten:

3

Ich habe OpenSSL von Brew installiert und find_packagescheint die Brew-Version zu erkennen, aber es wird versucht, das Projekt mit dem im System installierten OpenSSL zu verknüpfen, das LibreSSL ist.

Ich habe versucht, das zu erzwingen find_package, um den genauen Pfad der Bibliothek festzulegen, aber es tut nichts:

if(APPLE)
    set(OPENSSL_ROOT_DIR /usr/local/Cellar/[email protected]/1.1.1d/)
endif()

Am Ende habe ich die Abhängigkeiten manuell festgelegt, was nicht ideal ist, aber in der Zwischenzeit für die Entwicklung funktioniert.

# OpenSSL
find_package(OpenSSL REQUIRED)
if(OPENSSL_FOUND)
    if(APPLE)
        include_directories(/usr/local/Cellar/[email protected]/1.1.1d/include)
        list(APPEND LIB_LIST /usr/local/Cellar/[email protected]/1.1.1d/lib/libssl.dylib)
        list(APPEND LIB_LIST /usr/local/Cellar/[email protected]/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()

Die Cmake-Ausgabe stellt diese Informationen bereit, wobei die OpenSSL-Bibliothek vom Brauen erkannt wird, jedoch mit der Systembibliothek verknüpft wird. Nicht sicher warum.

-- OpenSSL Version: 1.1.1d /usr/local/Cellar/[email protected]/1.1.1d/include /usr/lib/libssl.dylib;/usr/lib/libcrypto.dylib

Ich hoffe das hilft!

Alvaro Luis Bustamante
quelle
Hallo, ich bin verwirrt, welche Datei ich bearbeiten muss, um diese Änderungen vorzunehmen. Danke vielmals!
Mikejw
1

Diese Seite hat mir geholfen, das OpenSSL-Problem zu lösen: https://gist.github.com/llbbl/c54f44d028d014514d5d837f64e60bac

Siehe auch diese Seite: https://forums.developer.apple.com/thread/119429

LostByte
quelle
1
Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert.
Agilanbu
1
Vielen Dank für die Antwort. Leider scheint es sich um ein anderes Problem zu handeln, das eine Ausnahme darstellt, wenn zur Laufzeit eine Verknüpfung zu einem nicht versionierten libcrypto hergestellt wird. Ich möchte hinzufügen, dass die bereitgestellte Lösung möglicherweise für die Entwicklung geeignet ist, für Endbenutzer jedoch zweifelhaft ist, da der Clientcomputer geändert werden muss, damit die App ausgeführt werden kann. Dies ist nicht etwas, das Sie von einem Benutzer einer App vernünftigerweise verlangen könnten.
Damien Sirkis
0

Als ich heute Morgen selbst auf dieses Problem gestoßen bin und mich umgesehen habe, bin ich auf diese Apple-Forum-Nachricht gestoßen, die darauf hinweist, dass Apple beabsichtigt, diese Arten von Bibliotheken nur intern zu verwenden. Es wird empfohlen, Bibliotheken von Drittanbietern selbst zu erstellen und in Ihre Anwendung aufzunehmen.

Casey
quelle