ホームページ > バックエンド開発 > C++ > Visual Studio 2010 で C から C 関数を呼び出すときに発生する「未解決の外部シンボル」エラーを解決する方法

Visual Studio 2010 で C から C 関数を呼び出すときに発生する「未解決の外部シンボル」エラーを解決する方法

Patricia Arquette
リリース: 2024-10-28 09:49:02
オリジナル
524 人が閲覧しました

How to Resolve

Visual Studio 2010 の C コードでのクロスプロジェクト C 関数呼び出しのリンカー エラー

リンカー エラー「未解決の外部シンボル g_fmt」を解決するにはVisual Studio 2010 で C コードから C 関数を呼び出すときに「」が発生した場合は、次の手順が役立つ場合があります:

1.構成と命名:

各 C モジュールに独自のヘッダーと実装 (拡張子 .c) があることを確認します。インクルード ガードとして G_FMT_H を使用するなど、ファイルとマクロには一貫した命名規則を使用します。

2.ヘッダー ファイルの変更:

header.h ヘッダー ファイルを function.h に置き換えます。このファイルには、関数をエクスポートするためのマクロが含まれています。

<code class="c">#define FUNCTIONS_EXPORT_API __declspec(dllexport) // For DLL export
#ifdef __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*);

#ifdef __cplusplus
}
#endif</code>
ログイン後にコピー

3.実装ファイルの変更:

対応する実装ファイル function.c を作成し、ヘッダー ファイルをインクルードします。エクスポートする関数とマクロを定義します。

<code class="c">#include "functions.h"

char *dtoa(double, int, int, int*, int*, char**) {} // Define functions
char *g_fmt(char*, double) {}
void freedtoa(char*) {}</code>
ログイン後にコピー

4.関数のエクスポート:

DLL を構築するプロジェクトで (または Visual Studio のプロジェクト設定として) FUNCTIONS_EXPORT マクロを定義して、エクスポートする関数をマークします。または、Visual Studio IDE によって自動的に定義されたマクロを使用します: ${YOUR_PROJECT_NAME}_EXPORTS.

追加の考慮事項:

  • ヘッダーで同じインクルード ガードを使用します。ファイルと対応する実装ファイル。
  • DLL にリンクしているプロジェクトに正しいインポート ライブラリがあること、または正しいインポート DLL を参照していることを確認してください。
  • プロジェクト プロパティでプリプロセッサ定義をチェックして、エクスポートが正しいことを確認してください。マクロは正しく定義されています。

以上がVisual Studio 2010 で C から C 関数を呼び出すときに発生する「未解決の外部シンボル」エラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート