5

これがばかげた質問である場合はご容赦ください。しかし、私は本に従っていますが、機能していません。私はdllにあるゲームエンジンを持っています。実際のゲーム アプリケーションで使用する外部関数がいくつかあります。

extern void game_preload();

これはすべて完璧でダンディですが、すべてをビルドしようとするとエラーが発生します。

Undefined reference to `game_preload()'

どうしてこれなの?アプリケーションでこれらの関数を実装できるように、dll を構築するにはどうすればよいですか?

私がフォローしている本は「高度な 2D ゲーム開発」と呼ばれ、問題があることについては言及されていません。

編集:私は本を間違って読んだので、動的ライブラリではなく静的ライブラリを作成することになっていました。しかし、動的ライブラリの「extern」の使用法に似たものはありますか?

4

1 に答える 1

0

静的ライブラリまたは動的ライブラリをリンクする必要があります (MSVC の場合、これは拡張子が「lib」のファイルであり、GCC の場合、システムに応じて「a」、「o」、または「dll」のいずれかになります)。このexternキーワードは、変数が別のコンパイル単位で見つかる可能性があることをコンパイラーに伝えるために使用することを意図しています (前方宣言と同様ですが、変数の場合)。関数プロトタイプはexternとにかく常に存在するため、そこでは省略できます。

一部のコードを C++ ではなく C として処理するようコンパイラに明示的に指示するために使用する特殊なケースもありextern "C"ます (たとえば、C++ コード内の C スタイル関数にリンクするため)。

編集:静的ライブラリの作成と使用はさらに簡単です。ここでいくつかの例を含めて、これについて読むことができます。ただし、これまでライブラリを使用しないと想定されている場合を除き(コメントの1つに記載されているように)、本の一部で説明する必要があると思います。

于 2012-07-07T16:21:32.950 に答える