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:
essayé de convertir le fichier lib créé avec GCC, a abouti à des symboles non définis tels que __divdi3 et __muldi3, n’a pas pu résoudre ce problème.
A également essayé ceci pour convertir le fichier sqlite3.o en * .obj, et ensuite utiliser digitalmars ‘lib.exe’ – échec aussi
La tentative d’objconv sur une bibliothèque générée par VC ++ échoue car: “SQLite.lib est une bibliothèque d’importation”
implib:
_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