0

階層

\Folder1
    cpu.h
    cpu.c
    sources
\Folder2
    mem.h
    mem.c
    sources
dirs

cpu.h

...
#define nope 0
...
int chuckTesta(unsigned int a);
....

cpu.c

#include <cpu.h>
int chuckTesta(unsigned int a){ ... }

mem.c

#include <cpu.h> // A
extern int chuckTesta(unsigned int a); // B

cout << nope << endl; // C
cout << chuckTesta(1); // D

cpu.libをFolder2内のファイルにリンクし、これらの要件を満たす方法はありますか?

  • 行Aを削除します
  • ラインCとDは引き続き機能します
  • 警告なしでコンパイルおよびリンクします(現在、未解決の外部シンボルまたは定義エラーが発生しています)

注:Folder2のソースファイルはFolder2内のファイルのみをコンパイルし、Folder1をインクルードパスとして使用します。Folder1と同様です。それぞれが.libファイル、cpu.libおよびmem.libをそれぞれ作成します。

LINK、CL、およびWindows8用のビルドを使用しています。

4

1 に答える 1

1

行Aを削除する際の問題はです#define nope 0。cpu.libで定義を静的整数に変換(または追加)すると、機能するはずです。最終的な実行可能ファイルでcpu.libとmem.libの両方にリンクしていることを確認してください。

cpu.h

...
#define nope 0
static int cpu_nope = nope;
...
int chuckTesta(unsigned int a);
....

mem.c

extern int chuckTesta(unsigned int a);
extern int cpu_nope;

cout << cpu_nope << endl;
cout << chuckTesta(1);
于 2012-07-10T00:41:10.803 に答える