我正在按照 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.cpp
和mydll.cpp
共享的头文件中放置前向声明来完成的。
// mydll.h
#ifndef HEADER_GUARD_MYDLL_H
#define HEADER_GUARD_MYDLL_H
void hello();
#endif
然后在main.cpp
和mydll.cpp
中#include "mydll.h"
.