cygwin - 在共享库中应用Singleton模式的问题

时间:2014-03-08 21:03:42

标签: c++ singleton cygwin shared-libraries extern

我正在使用Cygwin / Windows中的二进制文件,其中某些库与dlopen(path.c_str(), RTLD_LAZY);一起加载,但在这种情况下,C ++单例模式似乎不起作用。即使主程序使用Singleton::initInstance(some,params);调用初始化单例,该调用设置了类的私有static Singleton* ptr;字段,调用Singleton::getInstance();的共享库然后应该检索{{1作为初始化值,它返回ptr。我试图通过在主程序中定义nullptr来解决问题,该Singleton *sharedsingleton;可以通过extern调用在其他模块中访问,但即使在这种情况下,sharedsingleton似乎也是nullptr {1}}。我怎么能解决我的问题?我按如下方式编译库:

INT_FILES := $(CPP_FILES:.cpp=.o)
OBJ_FILES := $(INT_FILES:.o=.plugin)
CC_FLAGS := -g -c  -std=c++11 -I../../src -I../../ext-libs -DWINDOWS
CC_SHARED := -shared -Wl,--export-all-symbols -Wl,--enable-auto-import -Wl,--export-all-symbols -Wl,--no-whole-archive ../../src/agent/*.o -Wl,--no-whole-archive ../../src/graph/*.o -Wl,--no-whole-archive ../../src/event/*.o -Wl,--no-whole-archive ../../src/plugin-loader/*.o -Wl,--no-whole-archive ../../src/*.o
CC_JSONO := ../../ext-libs/json/json.cpp

all:    $(INT_FILES) $(OBJ_FILES)

%.o:    %.cpp
    g++ $(CC_FLAGS) -o $@ $<

%.plugin:   %.o 
    g++ $(CC_SHARED) -o $@ $<

提前感谢(同样的程序似乎在Linux下工作,使用不同的编译标志(-fPIC等))。

0 个答案:

没有答案