修改:
问题解决了,见下文。
我正在尝试生成静态库(不是导入库)。 我想将一些C / C ++代码导出到汇编程序项目中。我过去做过这个,但完全忘记了如何做到这一点,似乎没有任何工作。
对于我的调试代码,我使用以下C / C ++代码(export.cpp):
extern "C"
static
int Add(int a, int b)
{
return a + b;
}
我这样编译(生成export.obj& export.lib):
cl /c /EHsc export.cpp && lib export.obj
Dumpbin给我以下输出(dumpbin / EXPORTS export.lib):
Dump of file export.lib
File Type: LIBRARY
Summary
B0 .debug$S
2F .drectve
我期待以下输出(近似值):
File Type: LIBRARY
Exports
ordinal name
_Add@8
[snip]
为什么编译器/链接器不导出我的符号?
PS。
尝试的其他功能定义是:
extern "C" __declspec(dllexport) ...
__declspec(dllexport) int ..
extern "C" int ...
extern int ..
我几乎可以肯定其中一个应该有效,但我找不到其他人有这个问题(或者我不能谷歌)。
/ SYMBOLS标志确实显示该函数已链接到目标文件中:
008 00000000 SECT3 notype () External | _Add
修改:
问题解决了,我应该少依赖我认为我所知道的......
静态库只是在一个.lib文件中一起添加的一堆.obj文件。我的标志(因为它是可见的)一直可用于我的装配项目。
问题是我的程序集文件中的函数定义与.lib文件中的符号名称不匹配。
答案 0 :(得分:1)
我相信在C和C ++之间创建外部函数时,你正在寻找这种性质。
#ifdef __cplusplus
extern “C” {
#endif
// Function declarations go here, etc.
#ifdef __cplusplus
}
#endif
这允许C链接器“启用”您的函数。希望这是你想要的。