【发布时间】:2016-08-25 02:58:34
【问题描述】:
更新:
删除了关于 .so 文件的旧问题。它们不适用于 Windows。
我使用头文件解决了以下问题。我猜每次使用 C++ 链接时使用 .h 文件是一种标准约定?
mydll.h:
#ifndef mydll_h_
#define mydll_h_
void hello();
#endif
myprog.cc:
#include "mydll.h"
int main ()
{
hello ();
return 0;
}
mydll.cc:
#include <iostream>
void hello()
{
std::cout << "Hello World!\n";
}
或者,我在本指南中尝试了使用 Cygwin 的 .dll 库:https://cygwin.com/cygwin-ug-net/dll.html
他们的 .c 文件的编译工作,但我试图让它为我的 .cc 文件工作。有什么想法吗?
mydll.cc:
#include <iostream>
void hello()
{
std::cout << "Hello World!\n";
}
myprog.cc:
int main ()
{
hello ();
return 0;
}
我输入了:
g++ -c mydll.cc
g++ -shared -o mydll.dll mydll.o
但是当我输入时:
g++ -o myprog myprog.cc -L./ -lmydll
我明白了:
myprog.cc: In function ‘int main()’:
myprog.cc:4:10: error: ‘hello’ was not declared in this scope
hello ();
【问题讨论】:
-
"'hello' 未在此范围内声明"这与库无关。 .cc 是 C++ 源代码文件后缀。您需要在 C++ 中声明函数。
-
在 Windows 上,没有“共享库”。有DLL。它们的默认文件名后缀是 .dll。 Cygwin 并没有改变这一点。
-
我尝试更改功能,但它给出了相同的错误。关于您的第二条评论,我想这会将问题缩小到第二条。
-
“我尝试更改功能”不知道这意味着什么。如果您想询问有关编译问题的问题,请提出问题并提供源代码。如果您尝试了多个变体,请发布所有变体。
-
cygwin 的 gcc 编译教程仅适用于 .c 文件。如何将其配置为适用于 .cc 文件?
标签: c++ gcc linker cygwin shared-libraries