静态库的一部分时找不到 VS2012 标识符
VS2012 Identifer not found when part of static lib
使用 VS2012 C/C++:
我创建了一个名为 "libtools" 的静态库并将其链接到我的项目。
调用 libtools 库中的函数按预期工作。
我创建了第二个名为 "shunt" 的静态库并将其链接到我的项目。
但是当我在分流中加入对函数的调用时,我得到了一个 c3861 "Identifier not found"
我以相同的方式将这两个库添加到我的项目中。我在 Framework 和 References 中分别添加了一个 ref,并在 C/C++ Additional directories.
中添加了完整路径
我该如何解决这个问题?
C++ 在创建符号名称时使用一种叫做 name mangling 的东西。这是必需的,因为符号名称必须包含完整的函数签名。
当您使用 extern "C"
时,名称不会被破坏,并且可以在其他编程语言中使用,例如 C。
您显然是在 C++ 中创建分流库,这意味着 shuntfunc
函数在通过编译器后实际上并没有那样命名。由于使用该库的实际应用程序是用 C 语言编写的(根据标记和信息进行猜测),因此它找不到 shuntfunc
符号,而不是告诉 C++ 编译器不要破坏符号名称。
它适用于其他库可能是因为它也是用 C 语言制作的。
使用 VS2012 C/C++:
我创建了一个名为 "libtools" 的静态库并将其链接到我的项目。 调用 libtools 库中的函数按预期工作。
我创建了第二个名为 "shunt" 的静态库并将其链接到我的项目。 但是当我在分流中加入对函数的调用时,我得到了一个 c3861 "Identifier not found"
我以相同的方式将这两个库添加到我的项目中。我在 Framework 和 References 中分别添加了一个 ref,并在 C/C++ Additional directories.
中添加了完整路径我该如何解决这个问题?
C++ 在创建符号名称时使用一种叫做 name mangling 的东西。这是必需的,因为符号名称必须包含完整的函数签名。
当您使用 extern "C"
时,名称不会被破坏,并且可以在其他编程语言中使用,例如 C。
您显然是在 C++ 中创建分流库,这意味着 shuntfunc
函数在通过编译器后实际上并没有那样命名。由于使用该库的实际应用程序是用 C 语言编写的(根据标记和信息进行猜测),因此它找不到 shuntfunc
符号,而不是告诉 C++ 编译器不要破坏符号名称。
它适用于其他库可能是因为它也是用 C 语言制作的。