我正在尝试将一些网络代码包含到我的C ++应用程序中。我下载了CSimpleSocket并将所有.h和.cpp文件复制到我的主文件所在的目录中。然后我尝试包含其中一个标题,但是链接器只是阻止了一堆错误,例如:
和其他人。一切都在一个目录中,所以我认为这不是问题所在。我用来包含的代码是#include "PassiveSocket.h"
。我正在使用Dev-C ++,如果这有任何区别的话。我不明白我做错了什么,所以如果有人能帮助我,那就太好了。
请原谅我,如果这是一个非常愚蠢的问题,但我正在努力学习C ++,这并不容易。谢谢你的帮助。
答案 0 :(得分:4)
您收到此错误的原因是您的编译器找不到与CSimpleSocket标头对应的二进制文件。就像你写的那样
void someFunction(int someArg);
然后从未提供someFunction的实现。
要使用第三方库,您需要做两件事:
一旦获得了头文件和库文件,就需要将它们放在一个可以找到它们的地方。这个地方将根据您的操作系统,环境变量和编译器配置而有所不同。
既然它们在编译器可以找到它们的某个地方,你需要告诉编译器使用它们。头文件与#include命令一起使用,库文件通过向编译器提供参数来链接。
在幕后,Dev-C ++使用MinGW GNU GCC编译器,它调用类似于g++ file1.cpp file2.cpp ... filen.cpp -o filename
的命令,告诉程序g ++使用文件1到n编译名为“filename”的C ++可执行文件。还有其他标志可以添加到g ++中,例如告诉它在哪里搜索以及链接什么。
编译时CSimpleSocket库的名称是“clsocket”,因此我们需要找到一种方法来配置Dev-C ++以将-lclsocket
添加到g++
命令。我不使用Dev-C ++,所以我不能帮助你,但你可能正在寻找“链接选项”或类似的编译配置。您还需要确保.lib和.h文件位于搜索路径上,该路径也应该可以在Dev-C ++中进行配置。
CSimpleSocket还提供了一个安装程序,它应该自动创建.lib文件并将.lib和.h放在可以找到它们的位置,你应该考虑使用该安装程序。
我认为这个答案的复杂性凸显了C ++库集成生态系统的糟糕状态。不幸的是,在编写本文时,C ++中没有“模块”的概念。