5

成功せずに sqlite3 と静的にリンクしようとしました。「etc.c.sqlite3」ヘッダーと sqlite3 アマルガムを使用しています。.lib ファイルを作成するために、VC++ と MinGW-gcc の両方を試しましたが、どちらもソース ファイルを正常にコンパイルしましたが、どちらも COFF オブジェクト形式を生成します (DMD が使用する optlink は OMF で動作します)。「digitalmars.D」に関する大量の投稿を読んだ後、いくつかの異なる解決策を試しました。

オブジェクト変換:

  • GCC で作成した lib ファイルを変換しようとしたところ、__divdi3 や __muldi3 などの未定義のシンボルが生成され、これを解決できませんでした。

  • また、sqlite3.oファイルを* .objに変換してから、digitalmars 'lib.exe'を使用するためにこれを試みました-同様に失敗しました

  • VC++ で生成されたライブラリで objconv を実行しようとすると、「SQLite.lib はインポート ライブラリです」という理由で失敗します。

暗示:

  • プリコンパイル済みの DLL を sqlite.org からダウンロードして implib を使用すると、lib ファイルが生成されますが、静的ライブラリにリンクしても、同じ sqlite エラー (未定義記号_sqlite3_open, _sqlite3_errmsg, _sqlite3_close...

coffimplib:

  • VC++ で作成されたライブラリ ファイルで coffimplib を使用すると、プログラムはほとんど空のファイル (~2KB) を生成します。このファイルにはゴミ (つまり、シンボルはまったくなく、ほとんどが 'null' 値のみ) しか含まれていません。

  • GCCで作成したライブラリで同じことをすると、coffimplibは「インポートライブラリではありません」と文句を言い、変換されたライブラリファイルは生成されません。

DMC を使用して sqlite3 合併をコンパイルすると、大量のエラーが発生してコンパイルが失敗します。ここで私はどこにも行き詰まっていますが、これを解決するためのアイデアやヒントはありますか?

注: DLL を使用したくありませんが、sqlite と静的にリンクします (実行可能サイズの問題のため)。

4

3 に答える 3

3

スイッチで使っimplibてみてください。/system

于 2012-11-18T18:39:46.277 に答える
1

Windows では、dll を使用したほうがよいでしょう。多くの頭痛を軽減します。

COFF + VC のリンカを活用する x64 サポートの作業が進行中です。これにより、厄介な状況が変わることが期待されます。

編集: 静的ライブラリが本当に必要な場合は、OMF ファイルと COFF ファイルを一緒にリンクできる Unilink を試すことができます: ftp://ftp.styx.cabel.net/pub/UniLink

于 2012-11-19T10:41:45.570 に答える
0

SQLite CコードをコンパイルしてDアプリケーションとリンクしないのはなぜですか? これでライブラリ関連の頭痛の種から解放されると思います。

もちろん、代わりに SQLite スタティック ライブラリを DMC でコンパイルし、次のようにして D プロジェクトで使用することもできます。dmd -of myproggy myproggy.d somefile.d libsqlite.lib

于 2012-11-19T10:06:19.420 に答える