2

.lib ファイルを作成するのはこれが初めてで、次の C++ .exe プロジェクトがあります。

#include<stdio.h>

#pragma comment(lib, "mylib.lib")

int myFunction(void);

void main()
{
    myFunction(); 

} 

および別の C プロジェクト (.lib プロジェクト)

   int __cdecl myFunction(void)
   {
   }

.lib ファイル "mylib.lib" を正常にコンパイルして、exe ファイルのコンパイル ディレクトリに配置していますが、"エラー LNK2019: 未解決の外部シンボル" エラーが表示されます。

4

1 に答える 1

3

通常、ライブラリのヘッダーを提供し、それをライブラリとユーザーの両方に含めます。

まず、extern関数宣言でキーワードを使用する必要があります。また、呼び出し規約__cdeclを指定したため、一貫性を保つ必要があります。

mylib.h

extern int __cdecl myFunction(void);

mylib.cpp

#include "mylib.h"

int __cdecl myFunction(void)
{
    return 42;
}

libuser.cpp

#include <stdio.h>
#include "mylib.h"

#pragma comment(lib, "mylib.lib")

int main(void)
{
    printf( "The answer to the question is %d\n", myFunction() ); 
    return 0;
}

編集-- 名前マングリング...

プロジェクトが C および C++ であるというあなたのコメントを見たところです。この場合、発生するシンボルマングリングでコンパイラを支援する必要があります。ヘッダーで、次のようにします。

#ifdef __cplusplus
extern "C" {
#endif

extern int __cdecl myFunction(void);

#ifdef __cplusplus
}
#endif
于 2013-01-09T20:59:40.660 に答える