申し訳ありませんが、ここに問題があります。私のC++ APIの知識を向上させるために、私はライブラリファイルの種類についてもっと学びました。私は静的ライブラリをかなりよく理解しています。ライブラリをプロジェクトにリンクするだけで、その内容はコンパイルおよびリンクされたときにバイナリの中に置かれます。しかし、ダイナミックライブラリを使用しようとしたときに問題が発生しました。 __declspec関数を使用してDLLファイルを正常にコンパイルし、externブロックを作成できました(C++に正常にエクスポートできます)。しかし、ファイルをリンクしようとすると問題が発生します。 Web全体で見た複数のチュートリアルに基づいて、フォワード定義のヘッダーを作成し、それを実行可能プロジェクトに組み込みます。次に、インポートするライブラリのパスとともに、プロジェクトのビルド設定に検索ディレクトリを追加します。次に、プロジェクトをビルドすると、オブジェクトファイルがコンパイルされているためにリンカエラーが発生します。「-l [ファイルへのパス]」が見つかりません。もっと多くの設定ができますか? Code :: Blocks(私は現在、Eclipse CDTプラグインを使用しています)が同様のリンクエラーを生成したため、私のコンパイラ(MinGW)と何か関係があると思います。C++ DLLはリンクされませんか?
コードを見る必要がある場合は、以下で説明します。
// EXE: main.cpp
#include <iostream>
#include "DLLTutorial.h"
int main()
{
Function();
std::cout << "1 + 3:\t" << Add(1, 3);
}
// DLL: DLLTutorial.cpp
#define DLL_EXPORT
#include <iostream>
#include "DLLTutorial.h"
extern "C"
{
DLLCOMP int Add(int a, int b)
{
return a + b;
};
DLLCOMP void Function(void)
{
std::cout << "DLL Called!\n";
};
};
// DLL: DLLTutorial.h
#ifndef DLLTUTORIAL_H_
#define DLLTUTORIAL_H_
#include <iostream>
#ifdef DLL_EXPORT
#define DLLCOMP __declspec(dllexport)
#else
#define DLLCOMP __declspec(dllimport)
#endif
extern "C"
{
DLLCOMP int Add(int a, int b);
DLLCOMP void Function(void);
};
#endif /* DLLTUTORIAL_H_ */
これは、ウェブサイトから使用した非常に簡単なサンプルコードです。私は実行ファイルを適切にリンクすることができないので、私に与えられる助言に感謝します。
また、関連する質問があります。いくつかのチュートリアルをオンラインで読むと、Windows/Microsoft特有の__declspec関数についていくつかの言及がありました。これは本当ですか?この場合、他のオペレーティングシステムで使用するにはどうすればよいでしょうか?
私はリンカがあなたのために静的ライブラリを構築しないと思います(少なくとも、適切な設定がない場合)。なぜなら、プロジェクトのビルドディレクトリのどこにでも対応するlibファイルが見つかりません。 – B3tturTh3nU
dllファイルの近くを見てください(あなたのユーザー名を誤ってパスワードとして使用しましたか?) – ruslik
これを防ぐリンカ設定があります。私はMinGwを使用していません。また、使用できるdefファイルも存在する可能性があります。 –