同じ.hを共有するさまざまな.cppファイルからダイナミックライブラリを作成しようとしています。これは次のようなものです。
// mylib1.cpp
namespace mylib {
namespace part1 {
void init() {
part1::commonvar = true;
}
}
}
と
// mylib2.cpp
namespace mylib {
namespace part2 {
void check() {
if (part1::commonvar == true) {
// do something
}
}
}
}
これは一般的なヘッダーです
// mylib.h
#ifdef __cplusplus
extern "C" {
#endif
namespace mylib {
namespace part1 {
bool commonvar = false;
void init();
}
namespace part2 {
void check();
}
}
#ifdef __cplusplus
}
#endif
私はGCC(MingW)を使用して、これをコンパイルし、次のような単一のDLLにリンクしています。
g++ -Wall -s -O2 -c mylib1.cpp -o mylib1.o
g++ -Wall -s -O2 -c mylib2.cpp -o mylib2.o
g++ -Wall -s -O2 -shared -o MyLib.dll -Wl,--out-implib=lib/libMyLib.dll.a mylib1.o mylib2.o
したがって、私の問題は、これらすべてを実行すると、これら2つのオブジェクトをリンクしようとすると、その変数に対して複数の定義エラーが発生することです。したがって、commonvarを両方の名前空間に共通にするが、両方のオブジェクトファイルに複製しないようにする回避策があるのではないかと思います。必要に応じて、名前空間「mylib」のメンバーにすることができます。また、プリプロセッサコマンドを使用することもできます。
ご協力いただきありがとうございます