ホームページ >バックエンド開発 >C++ >VS2010 の C プロジェクトと C プロジェクトが混在している場合の LNK2001 リンカー エラーを解決するにはどうすればよいですか?

VS2010 の C プロジェクトと C プロジェクトが混在している場合の LNK2001 リンカー エラーを解決するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-01 09:34:02907ブラウズ

How to Resolve LNK2001 Linker Errors in Mixed C and C   Projects in VS2010?

VS2010 の C と C プロジェクトが混在するリンカー エラーを解決する

問題の説明

C コードを異なる VS2010 プロジェクトの C プロジェクトに統合すると、 C コードから C 関数を呼び出すときにリンク エラーが発生する。このエラーは LNK2001 として識別され、未解決の外部シンボルに関連しています。

解決策

この問題を修正するには、次の特定のガイドラインに従ってコードベースが適切に構成されていることを確認します。

  1. モジュール化コード:

    • 各 C モジュールは 1 つのヘッダー ファイルと 1 つのソース ファイルで構成される必要があります。
    • ファイルとマクロの両方の命名規則の一貫性を維持します。
  2. ヘッダーの作成と実装ファイル:

    • ヘッダー ファイル (functions.h など) で関数を定義し、ソース ファイル (functions.c など) で実装します。
  3. エクスポートとインポート:

    • FUNCTIONS_EXPORT_API マクロを使用して、ヘッダー ファイル内でエクスポート (またはインポート) する関数をマークします。
    • 関数を使用するプロジェクトにヘッダーを含める場合、 FUNCTIONS_EXPORT_API を定義しないでください (または、インポート値を使用してマクロを定義します)。
    • 必ず確認してください。関数をエクスポートするプロジェクトには、ヘッダーを含める前に (自動または手動で) FUNCTIONS_EXPORT マクロが定義されていること。

例コード

functions.h

<code class="c">#pragma once

#define FUNCTIONS_EXPORT_API

#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 implementation
}

char *g_fmt(char*, double)
{
    // Function implementation
}

void freedtoa(char*)
{
    // Function implementation
}</code>

追加の考慮事項

  • 内部の関数宣言で extern ストレージ指定子を使用しないでください。ヘッダー。
  • プロジェクト固有のマクロ (EXPORTFUNCTIONSPROJECT_EXPORTS など) を利用してエクスポートを自動化します。
  • プリプロセッサ定義のプロジェクト プロパティでマクロ名を確認します。

関連問題

  • [CLR Windows フォームの LNK2005 エラー](https://stackoverflow.com/a/17362530/1128974)
  • [Excel VBA、DLL エントリ ポイントが見つかりません] DLLからファイル](https://stackoverflow.com/a/7214325/1128974)
  • [ライブラリで fstream を使用すると、実行可能ファイルでリンカー エラーが発生します](https://stackoverflow.com/a/10068252 /1128974)
  • [C dll エクスポート未定義](https://stackoverflow.com/a/7709927/1128974)

以上がVS2010 の C プロジェクトと C プロジェクトが混在している場合の LNK2001 リンカー エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。