我正在使用MSYS2提供MinGW32和QTCreator以及CMake。我已经编写了一个非常基础的类(稍后将完成)作为共享库。我的主程序有一个这个类的实例作为其中一个类的成员。
基本上我的共享库看起来像:
// MyClass.h
class MyClass { public: MyClass(); };
// MyClass.cpp
#include "MyClass.h"
MyClass::MyClass() { }
我的程序看起来像:
// B.h
#include "MyClass.h"
class B
{
public:
// Some stuff here.
private:
MyClass m_other;
};
当我静态链接时,一切都很好。当我动态链接时,程序崩溃,GDB无法获得堆栈跟踪。看起来这个程序甚至没有真正开始。
在共享DLL上使用nm我看到类似:
61c41604 T __ZN9MyClassC1Ev
61c41604 T __ZN9MyClassC2Ev
我猜这些是构造函数。
在程序中使用nm我看到:
00414388 I __imp___ZN9MyClassC1Ev
构建过程没有生成.lib。
我的CMakeLists.txt看起来像:
add_library(MyLib SHARED
MyClass.cpp
)
我更愿意动态链接,所以如果有人能帮助我,我将非常感激。