MVC++静态库未生成任何导出

MVC++ Static library not generating any exports

本文关键字:任何导 未生 静态 MVC++      更新时间:2023-10-16

编辑

问题已解决,请参阅下文。

我正在尝试生成一个静态库(而不是导入库(。我想把一些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/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

编辑:

问题解决了,我应该少依赖我认为我知道的。。。

静态库只是将一堆.obj文件添加到一个.lib文件中。我的符号(因为它是可见的(一直可以用于我的装配项目。

问题是程序集文件中的函数定义与.lib文件中的符号名称不匹配。

我相信在C和C++之间创建外部函数时,您会看到这种性质的东西。

#ifdef __cplusplus
extern “C” {
#endif
// Function declarations go here, etc.
#ifdef __cplusplus
}
#endif

这允许C链接器"启用"您的函数。希望这就是你想要的。