Liaison statique de SQLite avec DMD (Windows x86)

J’ai essayé de lier statiquement avec sqlite3 sans succès. J’utilise l’en-tête ‘etc.c.sqlite3’ et la fusion sqlite3. Pour créer le fichier .lib, j’ai essayé à la fois VC ++ et MinGW-gcc, les deux compilant le fichier source avec succès – mais ils génèrent tous deux un format d’object COFF (optlink, utilisé par DMD, fonctionne avec OMF). Après avoir lu des tonnes de messages sur ‘digitalmars.D’, j’ai essayé plusieurs solutions différentes.

objconv:

implib:

  • Si je télécharge la DLL précompilée à partir de sqlite.org et utilise implib, cela génère un fichier lib, mais le nom mangling ne semble pas correspondre, car même si je crée un lien avec la bibliothèque statique, je reçois toujours les mêmes erreurs sqlite symbole _sqlite3_open , _sqlite3_errmsg , _sqlite3_close

coffimplib:

  • Si j’utilise coffimplib sur le fichier de bibliothèque créé par VC ++, le programme génère un fichier presque vide (~ 2 Ko) qui ne contient que des erreurs (pas de symboles du tout et la plupart du temps des valeurs nulles).

  • Si je fais la même chose avec la bibliothèque créée par GCC, coffimplib se plaint de “pas une bibliothèque d’importation” et aucun fichier de bibliothèque converti n’est généré.

Si j’utilise DMC pour comstackr la fusion sqlite3, la compilation ne se plaint pas des tonnes d’erreurs. Donc, je suis coincé dans nulle part, est-ce que quelqu’un a des idées ou des conseils sur ce qui pourrait résoudre ce problème?

Remarque: je ne veux pas utiliser une DLL, mais relier statiquement avec sqlite (pour les problèmes de taille exécutable).

Essayez d’utiliser l’ implib avec /system switch /system .

Sous Windows, il est préférable d’utiliser les DLL. Vous permet d’économiser beaucoup de maux de tête.

Le travail sur le support x64 est en cours et je pense que l’outil de liaison de COFF + VC sera utilisé. Nous espérons que cela changera la situation délicate.

Edit: Si vous avez vraiment besoin de librairies statiques, vous pouvez essayer Unilink, qui est capable de relier les fichiers OMF et COFF: ftp://ftp.styx.cabel.net/pub/UniLink

Pourquoi vous ne comstackz et ne liez simplement pas le code SQLite C avec votre application D? Je suppose que cela vous sauvera des maux de tête liés à la bibliothèque.

Bien sûr, une bonne alternative consiste à comstackr la bibliothèque statique SQLite avec DMC, et à l’utiliser avec votre projet D en effectuant simplement: dmd -of myproggy myproggy.d somefile.d libsqlite.lib