def*_*ode 40 c c++ gcc visual-studio weak-linking
GCC能够通过虚拟方式建立符号链接__attribute__((weak)).我想在静态库中使用弱符号,用户可以在其应用程序中覆盖它.一个GCC风格的弱符号会让我这样做,但我不知道它是否可以用visual studio完成.
Visual Studio是否提供类似功能?
Rin*_*ngo 73
你可以这样做,这是C中的一个例子:
/*
* pWeakValue MUST be an extern const variable, which will be aliased to
* pDefaultWeakValue if no real user definition is present, thanks to the
* alternatename directive.
*/
extern const char * pWeakValue;
extern const char * pDefaultWeakValue = NULL;
#pragma comment(linker, "/alternatename:_pWeakValue=_pDefaultWeakValue")
Run Code Online (Sandbox Code Playgroud)
AnT*_*AnT 17
MSVC++ __declspec(selectany)涵盖了弱符号的部分功能:它允许您使用外部链接定义多个相同的符号,指示编译器选择几个可用的任何一个.但是,我不认为MSVC++有任何可以覆盖弱符号功能的其他部分的东西:在库中提供"可替换"定义的可能性.
这个BTW让人想知道对MSVC++中标准可替换::operator new和::operator delete函数的支持是如何工作的.
Mic*_*urr 11
MSVC过去表现得如果在.obj文件和.lib中定义符号,它将使用.obj文件中的符号而不发出警告.我记得它还会处理在多个库中定义符号的情况,它将使用列表中名为first的库中的符号.
我不能说我已经尝试了一段时间了,但如果他们改变了这种行为我会感到惊讶(特别是.obj定义的符号会覆盖.lib文件中的符号).
我知道的唯一方法。将每个符号放在单独的库中。具有覆盖的用户对象也必须合并到库中。然后将所有内容链接到一个应用程序。必须将用户库指定为输入文件,必须使用选项将您的库传输到链接器/DEFAULTLIB:。