De l'utilisation de bibliothèques de tiers sur Windows j'ai appris les deux choses suivantes:
Essayez de distribuer votre bibliothèque comme une DLL plutôt qu'une bibliothèque statique. Cela permet une meilleure compatibilité entre les différents compilateurs c et les lieurs. Un autre problème avec les bibliothèques statiques dans Visual C++ est que le choix de la bibliothèque d'exécution peut rendre les bibliothèques incompatibles avec le code en utilisant une bibliothèque d'exécution différente et vous pourriez avoir besoin de distribuer une version de la bibliothèque pour chaque bibliothèque d'exécution.
Évitez C++ si possible. Le changement de nom de C++ diffère beaucoup entre différents compilateurs et il est peu probable qu'une bibliothèque construite pour C++ visuel puisse être reliée à partir d'un autre environnement de construction dans Windows. En ce qui concerne C, les choses vont beaucoup mieux, en particulier si vous utilisez des DLL. Si vous voulez vraiment obtenir les bonnes parties de C++ (comme la gestion des ressources via les constructeurs et les destructeurs), créez une couche de commodité en C++ que vous distribuez comme code source qui cache vos fonctions c.Puisque l'utilisateur a la source et la compile localement, il n'aura aucun problème de mangilation de nom ou abi avec l'environnement local. Sans trop savoir comment appeler le code c/C++ à partir de Java, je m'attends à ce qu'il soit beaucoup plus facile de travailler avec du code c que du code C++ à cause des problèmes de nom.
Le livre "Imperfect C++" a quelques discussions sur la compatibilité des bibliothèques que j'ai trouvé très utile.