問題の理解:
開発者別の Visual Studio 2010 ソリューションの C プロジェクトから C 関数を呼び出そうとしたときに、リンカー エラーが発生しました。 extern キーワードを使用し、ヘッダーを含めたにもかかわらず、プロジェクトは C ライブラリへのリンクに失敗し、「未解決の外部シンボル」エラーが発生しました。
構造の修正:
この問題を解決するには、C 関数のプロジェクト構造を再編成し、名前を変更する必要があります。ヘッダーに C 関数定義を含める代わりに、ヘッダーでは単に正しい呼び出し規則で extern 関数を宣言する必要があります。これらの関数の実装は、別の C ソース ファイルに移動する必要があります。
関数のエクスポート:
C 関数のエクスポートは、C ソースでマクロを定義することによって行われます。ファイル。プロジェクトがコンパイルされると、このマクロは関数をエクスポートされたものとして定義します。 C プロジェクトでは、extern 関数を定義するためにヘッダーを最初にインクルードし、次に関数をインポート済みとしてマークする適切なマクロをインクルードする必要があります。
推奨されるファイル構造:
ファイル例:
functions.h
<code class="c">#pragma once #if defined(_WIN32) #if defined(FUNCTIONS_STATIC) #define FUNCTIONS_EXPORT_API #else #if defined(FUNCTIONS_EXPORTS) #define FUNCTIONS_EXPORT_API __declspec(dllexport) #else #define FUNCTIONS_EXPORT_API __declspec(dllimport) #endif #endif #else #define FUNCTIONS_EXPORT_API #endif #if defined(__cplusplus) extern "C" { #endif FUNCTIONS_EXPORT_API char *dtoa(double, int, int, int*, int*, char**); FUNCTIONS_EXPORT_API char *g_fmt(char*, double); FUNCTIONS_EXPORT_API void freedtoa(char*); #if defined(__cplusplus) } #endif</code>
functions.c
<code class="c">#define FUNCTIONS_EXPORTS #include "functions.h" char *dtoa(double, int, int, int*, int*, char**) { //function statements } char *g_fmt(char*, double) { //function statements } void freedtoa(char*) { //function statements }</code>
これらの変更を実装すると、リンカー エラーが解決され、C プロジェクトは別のプロジェクトで定義された C 関数に正常にリンクして呼び出すことができるようになります。
以上がVisual Studio 2010 で別の C プロジェクトから C 関数を呼び出すときのリンカー エラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。