【发布时间】:2011-04-24 05:40:51
【问题描述】:
我有一个使用 C 代码制作的外部库。我希望从我的 c++ 项目中的库中调用一个函数。函数原型的原始格式是。
extern void butterThreeBp(real_T eml_dt, real_T eml_fl, real_T eml_fu, real_T eml_b3[7], real_T eml_a3[7]);
这导致了 MSVC2008 中的以下链接器错误
error LNK2019: unresolved external symbol "void __cdecl butterThreeBp(double,double,double,double * const,double * const)" (?butterThreeBp@@YAXNNNQAN0@Z) referenced in function "public: void __thiscall myThread::setDRNLc(double)" (?setDRNLc@myThread@@QAEXN@Z)
然后我把这个原型改成
extern "C" void ...
然后得到以下错误:
\butterThreeBp.lib : fatal error LNK1127: library is corrupt
我已经多次重建库,并且非常确定它没有损坏。任何帮助都会很棒。谢谢!!
【问题讨论】:
-
您需要确保
butterThreeBp的实现看到extern "C"声明。确保您#include 相关的头文件并始终注意编译器警告。 -
奇怪的是,我在使用另一个使用非常相似的方法构建的库时没有遇到任何问题。我使用了这里建议的 -extern "C"- 代码stackoverflow.com/questions/3877129/… 并且一切正常。出于某种原因,这不是。
-
@Paul R:butterThreeBp implementation 编译为 C,extern "C" 仅在 C++ 代码中有效。
-
@Clifford: true 如果 butterThreeBp 被编译为 C,但它可能在一个 .cpp 文件中,在这种情况下它仍然可以使用 C 链接使用
extern "C"编译。
标签: c++ visual-c++ linker unresolved-external