小编jac*_*cob的帖子

使用 MinGW-w64 从 DLL 导出具有体外定义的类模板

当涉及类模板时,我在使用 MinGW-w64(基于 MSYS2 的 GCC 11.3.0)将一个简单的 Windows 可执行文件正确链接到一个简单的 DLL 时遇到问题。最小的再现器如下。

库的完整代码(library.cpp)是

template <class T> class __attribute__((dllexport)) TestClass
{
    public:
        void member() { __builtin_printf("member from library\n"); }
        void other_member();
};

template class __attribute__((dllexport)) TestClass<int>;

template <class T> void __attribute__((dllexport)) TestClass<T>::other_member () {}
Run Code Online (Sandbox Code Playgroud)

我用它来编译它

g++ -std=c++11 library.cpp -o library.dll -shared -Wl,--out-implib,library.dll.a -Wl,--output-def,library.def
Run Code Online (Sandbox Code Playgroud)

程序的完整代码(program.cpp)是

template <class T> class __attribute__((dllimport)) TestClass
{
    public:
        void member() { __builtin_printf("member from program\n"); }
        void other_member();
};

extern template class __attribute__((dllimport)) TestClass<int>;

int main …
Run Code Online (Sandbox Code Playgroud)

c++ templates mingw dllimport dllexport

5
推荐指数
1
解决办法
326
查看次数

标签 统计

c++ ×1

dllexport ×1

dllimport ×1

mingw ×1

templates ×1