使用mingw遵循简单的c ++ DLL教程时出错



我正在按照 https://cygwin.com/cygwin-ug-net/dll.html 的"构建和使用DLL"教程进行操作。 我已经制作了mydll.cpp文件:

#include <iostream>
void hello()
{
std::cout << "Hello World of DLL" << std::endl;
}

编译并链接它:

g++ -c mydll.cpp
g++ -shared -o mydll.dll mydll.o

然后尝试在main中使用hello()函数.cpp:

int main ()
{
hello ();
}  

g++ -o main main.cpp -L./ -l mydll链接并得到后:

error: 'hello' was not declared in this scope
hello();

本教程指出,一切应该都很好。我错过了什么?

链接过程与编译过程是分开的。您已经提供了包含链接过程中使用的hello的编译定义的库。

但是在编译过程中(在链接之前发生),不会以任何方式使用库。为了让编译器知道hello是什么,您仍然需要声明该函数。

这通常是通过在main.cppmydll.cpp共享的头文件中放置前向声明来完成的。

// mydll.h
#ifndef HEADER_GUARD_MYDLL_H
#define HEADER_GUARD_MYDLL_H
void hello();
#endif

然后在main.cppmydll.cpp#include "mydll.h".

最新更新