2012-03-15 21 views
1

Visual Studio 2010で作成したプリコンパイル済みライブラリ(.lib)を使用しています。私のソリューションには2つのプロジェクトがあります。最初のプロジェクト(C)はライブラリを構築します。 2番目のプロジェクト(C++)は、ライブラリをテストするためのWin32コンソールアプリケーションです。私が試したことはすべて、リンカのエラーを解決しません。 (私はすべてが同じソリューションにあるので、これは簡単だと思っていました)。ありがとう。Visual Studioでプリコンパイル済みライブラリを使用してアプリケーションを構築する方法

1> MyProject.obj:エラーLNK2019:未解決の外部シンボル "無効__cdeclはmy_function(無効)"(YAXXZ @@はmy_function?)関数で参照をここ

は、私が取得していますリンカエラーですデスクトップ\ MySolution \デバッグ\ MyProject.exe \ \ Documents and Settings \ユーザー:致命的なエラーLNK1120:1つの未解決の外部

これは、Win32コンソールアプリケーションのコードです:

1> C _wmain

#include "stdafx.h" 
#include "my_api.h" 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    my_function(); 

    return 0; 
} 

はここmy_functionmy_api.hに宣言されている方法は次のとおりです。

extern VOID my_function(VOID); 
+0

.cライブラリの出力ディレクトリは、C++プロジェクトのライブラリパスにありますか?残念ながら、同じソリューションでそれらを使用するだけでは十分ではありません(C#とは対照的に、簡単に死にます) –

+0

リンカのエラーを推測しないでください。 –

+0

@ハンスパッサント:謝罪します。あなたの丁寧な提案をありがとう。私はそれを引き起こすリンカエラーとコードを追加しました。 –

答えて

2

あなたはそれらの機能は、Cコードで定義されたことを理解することは、リンカためにdeclare your function with C linkageする必要がなく、C++コード:

// my_api.h 
#ifdef __cplusplus 
extern "C" { 
#endif 

extern VOID my_function(VOID); 
// more function declarations etc. 

#ifdef __cplusplus 
} 
#endif 

機能が1つしかない場合は、中かっこを削除できます。

// my_api.h 
#ifdef __cplusplus 
extern "C" 
#endif 
extern VOID my_function(VOID); 
+0

どちらも良い答えですが、あなたのフィードバックが私が考慮していなかった問題を解決したため、私はあなたを受け入れています。ありがとう! –

1

ライブラリプロジェクトの出力ディレクトリ(そのプロジェクトに展開されている$(OutDir))がテストプロジェクトのリンカー検索パスにあることを確認します。これを行うには、プロジェクトプロパティダイアログに移動します。 Linker -> Generalの下に、ディレクトリがAdditional Library Directoriesに設定されていることを確認します。さらにLinker -> Inputの下に、ライブラリ自体(my_api.lib)がAdditional Dependenciesに記載されていることを確認してください。

+0

偉大なフィードバックをありがとう!あなたは私のプロジェクト設定を整理するのを助けました。 :) –

関連する問題