Meu projeto usa o CMake para compilar, mas usa a versão local do macOS do clang e ld ao compilar em um Mac.
Após a atualização para o Xcode 11 no MacOS 10.15 Catalina, eu sou incapaz de ligação com o seguinte erro: ld: cannot link directly with dylib/framework, your binary is not an allowed client of /usr/lib/libcrypto.dylib for architecture x86_64
.
Isso está relacionado ao novo aplicativo de reconhecimento de firma? Existe uma correção que não exija que o projeto esteja no Xcode (eu uso o CLion para desenvolver no macOS) ou não exija vincular minha própria compilação do OpenSSL?
Qualquer ajuda apreciada.
Respostas:
Ao me deparar com esse problema esta manhã e me aprofundar, deparei com uma mensagem no fórum da Apple que indica que a Apple pretende que esses tipos de bibliotecas sejam usados apenas internamente. O conselho é criar você mesmo bibliotecas de terceiros e incluí-las no seu aplicativo.
fonte
Instalei o OpenSSL a partir do brew e
find_package
parece detectar a versão do brew, mas ele tenta vincular o projeto ao OpenSSL instalado no sistema, que é o LibreSSL.Eu tentei forçar o
find_package
para definir o caminho exato da biblioteca, mas isso não faz nada:Então, acabei definindo as dependências manualmente, o que não é o ideal, mas funciona enquanto isso para o desenvolvimento.
O Cmake Output fornece essas informações, onde detecta a biblioteca OpenSSL do brew, mas vincula-se à biblioteca do sistema. Não sei por que.
Espero que esta ajuda!
fonte
Esta página me ajudou a resolver o problema do OpenSSL: https://gist.github.com/llbbl/c54f44d028d014514d5d837f64e60bac
Consulte também esta página: https://forums.developer.apple.com/thread/119429
fonte
Como o
FindOpenSSL.cmake
código procura as bibliotecas e armazena o resultado no cache do CMake, você pode definir o caminho à força antes de tentar encontrar o OpenSSL. OFindOpenSSL.cmake
código não substituirá o seu caminho.Certifique-se de limpar o cache do CMake, porque uma vez que a biblioteca é encontrada com o caminho errado, esse hack não o corrigirá, mesmo se você executar o CMake novamente em seu projeto.
fonte