J'utilise plusieurs P/Invokes sous .NET. Cependant, je veux que ma bibliothèque fonctionne à la fois sous Windows et Linux, de préférence avec les mêmes binaires.DllImport noms incomplets
Étant donné que la bibliothèque native dont je dépend est disponible sur plusieurs plates-formes, j'espérais juste les avoir avec les binaires de ma bibliothèque gérée.
En ce moment je suis en utilisant quelque chose comme ceci:
[DllImport("/usr/lib/libMYLIBNAME.so.1")]
Mais cela fonctionne évidemment que pour Linux. Je considérais que je pourrais peut-être copier ce binaire de/usr/lib et distribuer en même temps que ma demande, je réduiraient les ci-dessus pour:
[DllImport("libMYLIBNAME.so")]
Mais cela est encore Linux uniquement.
Y a-t-il un moyen de changer la chaîne de nom de la bibliothèque afin qu'elle recherche libMYLIBNAME.so sous Linux et MYLIBNAME.dll sous Windows, ou quelque chose de très similaire?
Je voudrais éviter tout ce qui nécessite recompilation pour chaque plate-forme supportée ...
(Note: Il serait encore mieux une solution qui regarderait pour MYLIBNAME.dll sous Windows et/usr/lib/libMYLIBNAME .so.1 sous Linux, mais cette amélioration est facultative)
Laisser l'extension éteint ne fonctionne pas, j'ai essayé cela. –
Je vais avec l'option dllmap. Je le savais mais je ne savais pas qu'il pouvait être spécifié par assemblage. – luiscubal
@Hans, c'est étrange, je l'ai testé et cela a fonctionné pour moi. Avez-vous eu le '.donc dans le même répertoire que le '.exe'? J'ai testé avec Mono 2.4.4 sur Ubuntu 10.04. –