导出函数中有多少下划线('_')(C++
How many underscores ('_') in the exported function in C++
我在Visual Studio 2015中有一个dll项目构建。我使用.def
文件导出函数。但是,我无法理解编译器如何在函数(_)
下划线作为前缀。在某些地方,它添加了 1 个下划线,在某些地方添加了 2 个下划线,甚至在某些地方添加了 3 个下划线。
我的代码中有一个名为Object()
的函数,这个Visual Studio似乎生成了很多版本,如__imp____Object
,__imp___Object
和__imp__Object
。我不明白为什么这么多版本。
我面临的问题是,即使我在.def
文件中添加了___Object
和__Object
,我也会收到以下链接器错误:
error LNK2001: unresolved external symbol __imp___Object
任何建议,这是怎么回事。
编译器似乎遵循一种模式来装饰这些导出的函数。在x86
平台上,通过.def file
或__declspec(dllexport)
导出的每个函数都有一个_cdecl calling convention
,.lib
文件包含 2 个条目。一个作为以_
为前缀的函数名称,另一个以__imp__
为前缀
例如,如果def file
具有导出的函数,则Function1
则库将具有_Function1
和__imp__Function1
这将因x64
和其他函数调用约定而异。
综上所述,我的案例很特殊。我的def文件有Object
,_Object
和__Object
,这应该导致_Object
,__imp__Object
,__Object
,__imp___Object
,___Object
和__imp____Object
。
现在从上面的列表中,第二个实际名称 (_Object
) 和第一个生成的名称是相同的,因此它跳过了第二个名称的生成符号。因此,我收到链接错误:
错误 LNK2001:未解析的外部符号__imp___Object
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- 下划线不会与"发送输入"一起显示C++
- 在 QTextEdit C++ 中为特定行添加下划线
- 导出函数中有多少下划线('_')(C++
- 有没有选项不自动所有前导下划线 _ 以导出 emscripten 中的函数?
- 删除数字并在C++中保留字符串的下划线
- c++ 函数中额外的下划线名称
- 在C 中,Haskell下划线有其他选择吗?
- 使用与号后跟下划线命名的变量是什么意思?
- C++20 中的严格别名规则是否允许标准 c++ unicode 字符和下划线类型之间"reinterpret
- 用下划线填充空格
- 在Typedef结构中,下划线意味着什么
- 为什么非下划线名称保留给 UDL 的实现,而不是相反
- 下划线、名称和文字运算符
- 检查两个彼此相邻的两个下划线
- 使用查找检查,如果我的字符串中有下划线
- 代码的错误答案是在Java Camel案件和C 下划线标识符之间转换的错误答案
- 用户定义的文字、下划线和全局名称
- 如何在MFC C++中给文本加下划线
- 将带下划线的文本作为字符串