在静态库的一部分时找不到VS2012标识符

时间:2015-06-23 08:18:39

标签: c visual-studio-2012 linker static-libraries

使用VS2012 C / C ++:

我创建并链接了一个名为" libtools"的静态库。到我的项目。 对libtools lib中的函数的调用按预期工作。

我创建并链接了第二个名为" shunt"的静态库。到我的项目。 但是当我在分流中合并一个函数的调用时,我得到一个c3861"未找到标识符"

我以同样的方式将两个lib添加到我的项目中。我在Framework和References中为每一个添加了一个ref,并在C / C ++ Additional目录中添加了完整路径。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

C ++在创建符号名称时会使用名为name mangling的内容。这是必需的,因为符号名称必须包含完整的函数签名。 当您使用extern "C"时,名称不会被破坏,并且可以从其他编程语言中使用,例如C。

你明确地用C ++创建了分流库,这意味着shuntfunc函数在通过编译器后实际上并没有这样命名。由于使用库的实际应用程序是在C中进行的(根据标记和信息进行猜测),因此找不到shuntfunc符号,而不是告诉C ++编译器不要破坏符号名称。

它适用于其他库可能是因为它也是用C语言制作的。