0

静的ライブラリの作成方法と使用方法を学びたいと思っていますが、いくつかの問題に直面しました。これは私がやったことです。

最初に、いくつかのコードを記述しString.hString.cppファイルに配置しました。

次に、オブジェクト ファイルにコンパイルしました。

mingw32-g++ -c -O2 -s -DNDEBUG String.cpp -o .\obj\String.o

それから私はそれをアーカイブしました(?):

ar cr .\lib\String.lib .\obj\String.o

そして、それをインデックス化(?)しました:

ranlib .\lib\String.lib

その後、テストを正常にコンパイルして mingw にリンクしました。

mingw32-g++ -std=c++03 -Wall -O2 -s -DNDEBUG .\test\src\test.cpp .\lib\String.lib -o .\test\bin\test.exe

テストは完全にコンパイル、リンク、実行されました。

その後、このライブラリを MSVS12 プロジェクトに含めたいと考えました。私は:

  1. へのパスを追加しましString.hProject - C/C++ -General - Additional Include Directories

  2. String.h一部のプロジェクト ヘッダーに含まれる

  3. へのパスを追加しましString.libProject - Linker - General - Additional library directories

  4. String.libに追加Project - Linker - Input - Additional dependencies

これらすべての手順の後、プロジェクトをビルドしようとすると、リンカーは多くLNK2011LNK2019エラーを出します。私の機能の実装が見つからないようです...

何が間違っているのか、どうすれば修正できるのか教えてください。ありがとう!

4

1 に答える 1

1

C++ には、バイナリ形式に関する標準があまりありません。ライブラリに名前を記録する方法さえもです。(C++ コンパイラは、名前を「マングル」して、引数や戻り値の型コードなどを挿入するのが好きです。しかし、その方法については正確には同意していません。)結果として、あるコンパイラのライブラリが別のコンパイラに移植されることはめったにありません。それらの関数が として宣言されていない限りextern "C"

ライブラリ関数をそのように宣言するか、ライブラリを使用する場合は Visual Studio でライブラリをコンパイルする必要があります。(必要に応じて、ライブラリのコードをヘッダー ファイルに入れることもできますが、コンパイル済みの静的ライブラリを作成しようとしているように思えます。)

于 2013-05-18T00:15:04.327 に答える