Pourquoi convertir SO en DLL ?
Un fichier .so stocke le code machine au format ELF avec les conventions d'appel système Linux et le lien glibc. Un .dll stocke le code machine au format Windows PE avec le lien API Windows. Ils sont compilés pour des systèmes d'exploitation entièrement différents - changer le format du conteneur sans recompiler produirait un fichier qu'aucun OS ne pourrait charger car le code interne appellerait toujours le mauvais système.
Comment convertir SO en DLL
MinGW-w64 OPEN-SOURCE
Effectuez une compilation croisée du code source de la bibliothèque pour Windows en utilisant x86_64-w64-mingw32-gcc -shared -o lib.dll *.c pour produire un .dll Windows à partir d'une machine de build Linux.
MSVC FREE
Compilez le code source de la bibliothèque sur Windows en utilisant Visual Studio ou cl.exe avec le drapeau de liaison /DLL pour produire un .dll Windows.
À propos de ces formats
Un fichier .so est une bibliothèque d'objets partagés sur Linux et Unix - l'équivalent Linux d'un .dll Windows. Les programmes le chargent automatiquement lors de l'exécution ; vous ne…
Ouvrir les détails de .SO →Une DLL (Dynamic Link Library) est un fichier de bibliothèque Windows contenant du code compilé que les programmes chargent pendant leur exécution ; ce n'est donc pas un fichier que l'on…
Ouvrir les détails de .DLL →Qualité et points de vigilance
- Les fichiers
.soet.dllcontiennent tous deux du code machine natif compilé spécifiquement pour leur OS respectif - la limite se situe au niveau du système d'exploitation, pas seulement du format de fichier. - Si vous n'avez pas le code source et que la bibliothèque est propriétaire, il n'existe aucune voie légale ou pratique vers un
.dll. - De nombreuses bibliothèques open-source proposent déjà des fichiers
.dllWindows précompilés - vérifiez la page des versions du projet avant de tenter une recompilation.
Foire aux questions
Pourquoi un convertisseur ne peut-il pas simplement réemballer le binaire ?
.so appelle des interfaces du noyau Linux qui n'existent pas sur Windows - même enveloppé dans un conteneur PE, Windows ne peut pas exécuter le code.Wine peut-il exécuter un `.so` Linux sur Windows ?
.dll s'exécutent sur Linux - c'est la direction opposée. Cela n'aide pas à exécuter des objets partagés Linux ELF sur Windows.