当涉及类模板时,我在使用 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)