2016-07-19 144 views
5

Sto installando DotNet sul mio Macintosh utilizzando MacPorts insieme a DotNet core di Microsoft. Il loro sito dice di installare OpenSSL da HomeBrew:MacPorts OpenSSL Force Link per l'installazione di DotNet

brew update 
brew install openssl 
brew link --force openssl 

ho OpenSSL installato tramite MacPorts:

ports install openssl 

Che cosa significa il "birra collegamento --force OpenSSL" fare, e come posso implementare lo stesso cosa usando MacPorts?

Grazie!

+0

Quindi, se ho capito bene, si desidera implementare un comando che non si sa quale sia la funzione è in un altro gestore di pacchetti che non è destinato? Dubito che sia una buona idea. –

+1

Dato che la domanda è stata posta nel contesto di .NET Core, non penso che l'OP voglia necessariamente implementare il comando "link" in MacPorts, ma piuttosto vuole ricreare qualunque cosa sia quel comando. In particolare, senza l'equivalente di tale comando, .NET Core trova la versione OS X di OpenSSL (0.9.8something) ma non la versione MacPorts (1.0.2something) e si blocca. –

+0

'brew link' crea collegamenti simbolici per i file installati dalla formula openssl in'/usr/local'; Homebrew di solito installa i file solo in una cartella sotto '/ usr/local/Cellar'. – neverpanic

risposta

4

Ho trovato la soluzione a questo particolare problema ma non il più generale in issue 173 di .NET Core. In breve, è necessario collegare le versioni MacPorts di libcrypto.dylib e libssl.dylib a /usr/local/lib:

sudo ln -s /opt/local/lib/libcrypto.1.0.0.dylib /usr/local/lib/libcrypto.1.0.0.dylib 
sudo ln -s /opt/local/lib/libssl.1.0.0.dylib /usr/local/lib/libssl.1.0.0.dylib 
+2

Non dovresti farlo. Esportare invece 'DYLD_FALLBACK_LIBRARY_PATH =/opt/local/lib' per fare in modo che il loader trovi le librerie in'/opt/local/lib', o usare 'install_name_tool -change' sul binario dotnet che fa riferimento alle librerie in/usr/local/lib' per cambiare i percorsi a '/ opt/local/lib'. – neverpanic

+0

Hmm, almeno sudo install_name_tool -change libcrypto.1.0.0.dylib /opt/local/lib/libcrypto.1.0.0.dylib/usr/local/share/dotnet/dotnet' (e idem per libssl) didn ' Per me il trucco: dotnet getta ancora una 'DllNotFoundException' per' System.Security.Cryptography.Native' come prima. –

+0

Potrebbe esserci una libreria diversa che fa riferimento alle librerie libssl e libcrypto, oppure dotnet potrebbe effettivamente provare ad aprire le librerie in fase di runtime usando dlopen. La mia conoscenza di dotnet è purtroppo troppo limitata per sapere quale di questi (se esiste) è il caso. – neverpanic