构造函数/析构函数链接错误
Constructor / Destructor Linking Error
我有一个项目(创建一个dll),比如test.dll,我不会在dll中导出一个类的构造函数和析构函数,比如TestClass。这是因为我有一些工厂函数应该被调用来创建和销毁 TestClass 的对象。这种设计在我创建的独立示例中运行良好,我尝试使用 test.dll 中的 TestClass 对象。
但是,当我将此测试.dll(或我使用的是 .lib,因为我使用的是 Visual Studio)链接到我们生产模块中的一个项目时,我收到奇怪的链接错误,指向它无法为 TestClass 找到的构造函数和析构函数。我知道一个事实,我不会调用 new/delete,也不会在项目的任何地方创建 TestClass 的任何堆栈实例。我认为生产模块使用 C#/CLR/CLI 以及C++。唯一的解决方法是导出 TestClass 的构造函数和析构函数。这在设计上是不可取的。
这种情况对任何人都熟悉吗?有人可以指出可能是什么问题吗?
这是我得到的错误:
Error 5264 error LNK2028: unresolved token (0A000BA3) "public: virtual __thiscall BE::TestClass::~TestClass(void)" (??1TestClass@BE@@$$FUAE@XZ) referenced in function "public: virtual void * __thiscall BE::TestClass::`vector deleting destructor'(unsigned int)" (??_ETestClass@BE@@$$FUAEPAXI@Z) AMBestDetailBridge.obj BEBase
Error 5373 error LNK2001: unresolved external symbol "public: virtual __thiscall BE::TestClass::~TestClass(void)" (??1TestClass@BE@@$$FUAE@XZ) AMBestDetailBridge.obj BEBase
谢谢!
链接错误表明您正在通过删除 [] 调用析构函数,因此很可能在您的生产模块中,您有某些代码:
TestClass* pTest = ...
delete pTest;
TestClass* pTestArray = ...
delete[] pTest;
当然,在智能指针的情况下,这可能不是那么明显:
SmartPtr<TestClass> spTest = ...
// delete called automatically when out of scope.
在一个模块中分配并在另一个模块中删除将使您处于潜在的风险中 - 因为 2 个模块可能使用不同的堆进行内存分配(假设您重新定义新的运算符),幸运的是这个问题在链接时暴露,而不是运行时。
相关文章:
- Netbeans 10:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- CMake 错误:链接器命令失败,退出代码为 1 和 cpp.o 文件
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 如何修复 clang: 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- Android NDK.Build命令失败.未定义的引用.clang++:错误:链接器命令失败,退出代码为1
- 使用cmake错误链接boost日志
- 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用):在 Macbook 上
- C++ XCODE ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -
- clang:错误:链接器命令失败,C++代码中的退出代码为 1(使用 -v 查看调用)
- 静态库中的 g++ 错误链接函数
- 未定义的参考错误链接天然函数Android
- C++编译错误:ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v
- QT Q_PROPERTY错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- OSX MOJAVE -LD:架构X86_64 clang找不到符号:错误:链接器命令失败,出口代码1
- C 错误链接器命令失败了出口代码1(使用-V查看调用)
- LD:架构x86_64 clang找不到符号:错误:链接器命令失败,出口代码1(使用-v to See
- 聚输出错误 - 链接列表
- Xcode链接器错误:链接器命令失败,退出代码为1(使用-v查看调用)
- 尝试构建C DLIB示例无法与数百个未定义的参考错误链接