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

时间:2015-07-24 20:53:34

标签: c++ windows linker static-linking

修改

问题解决了,见下文。

我正在尝试生成静态库(不是导入库)。 我想将一些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文件中的符号名称不匹配。

1 个答案:

答案 0 :(得分:1)

我相信在C和C ++之间创建外部函数时,你正在寻找这种性质。

#ifdef __cplusplus
extern “C” {
#endif

// Function declarations go here, etc.

#ifdef __cplusplus
}
#endif

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