「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > VS2010 の C プロジェクトと C++ プロジェクトが混在している場合の LNK2001 リンカー エラーを解決するにはどうすればよいですか?

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

2024 年 12 月 21 日に公開
ブラウズ:346

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 マクロが (自動または手動で) 定義されていることを確認してから、 header.

コード例

functions.h

#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

functions.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
}

追加の考慮事項

  • ヘッダー内の関数宣言で extern ストレージ指定子を使用することは避けてください。
  • プロジェクト固有のマクロ (例: EXPORTFUNCTIONSPROJECT_EXPORTS) を利用して自動化します。 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)
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3