ホームページ >バックエンド開発 >C++ >Visual Studio 2010 で別の C プロジェクトから C 関数を呼び出すときのリンカー エラーを解決する方法

Visual Studio 2010 で別の C プロジェクトから C 関数を呼び出すときのリンカー エラーを解決する方法

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

How to Resolve Linker Errors When Calling C Functions from a Separate C   Project in Visual Studio 2010?

別の VS2010 プロジェクトの C コードから C 関数を呼び出すときのリンカー エラー

問題の理解:

開発者別の Visual Studio 2010 ソリューションの C プロジェクトから C 関数を呼び出そうとしたときに、リンカー エラーが発生しました。 extern キーワードを使用し、ヘッダーを含めたにもかかわらず、プロジェクトは C ライブラリへのリンクに失敗し、「未解決の外部シンボル」エラーが発生しました。

構造の修正:

この問題を解決するには、C 関数のプロジェクト構造を再編成し、名前を変更する必要があります。ヘッダーに C 関数定義を含める代わりに、ヘッダーでは単に正しい呼び出し規則で extern 関数を宣言する必要があります。これらの関数の実装は、別の C ソース ファイルに移動する必要があります。

関数のエクスポート:

C 関数のエクスポートは、C ソースでマクロを定義することによって行われます。ファイル。プロジェクトがコンパイルされると、このマクロは関数をエクスポートされたものとして定義します。 C プロジェクトでは、extern 関数を定義するためにヘッダーを最初にインクルードし、次に関数をインポート済みとしてマークする適切なマクロをインクルードする必要があります。

推奨されるファイル構造:

  • functions.h - C 関数の extern 宣言を含むヘッダー ファイル
  • functions.c - 関数定義と必要なエクスポート マクロを含む実装ファイル

ファイル例:

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 サイトの他の関連記事を参照してください。

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