我正在尝试从共享相同 .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
所以,我的问题是,当我执行所有这些操作时,在尝试链接这两个对象时,我得到了该变量的多个定义错误。所以,我想知道是否有一种解决方法可以使commonvar对于两个命名空间都是通用的,但在两个目标文件中都不重复。如有必要,我可以使其成为命名空间“ mylib ”的成员,并且我也可以使用预处理器命令。
谢谢你的帮助