在我的c++应用程序中包含第三方代码时遇到麻烦

Trouble including third-party code in my C++ application

本文关键字:代码 遇到 麻烦 第三方 包含 我的 c++ 应用程序      更新时间:2023-10-16

我试图将一些网络代码包含到我的c++应用程序中。我下载了CSimpleSocket,并将所有的。h和。cpp文件复制到我的主文件所在的目录中。然后我试着包括一个头,但链接器只是barup了一堆错误,如:

  • [链接器错误]对CPassiveSocket的未定义引用::CPassiveSocket(CSimpleSocket::CSocketType)'
  • [链接错误]对' CSimpleSocket::Initialize()'的未定义引用
  • [链接错误]未定义的引用' CPassiveSocket::Listen(unsigned char const*, short, int)'
  • [链接器错误]对' CPassiveSocket::Accept()'的未定义引用

等。所有东西都在一个目录里,所以我认为这不是问题。我要包含的代码是#include "PassiveSocket.h"。我正在使用devc++,如果这有什么不同的话。我不明白我做错了什么,所以如果有人能帮助我,那就太好了。

如果这是一个非常愚蠢的问题,请原谅我,但我正在努力学习c++,这并不容易。谢谢你的帮助。

你得到这个错误的原因是因为你的编译器找不到对应于CSimpleSocket头的二进制文件。就好像你写了

void someFunction(int someArg);

然后从未提供someFunction的实现。

要使用第三方库,需要做两件事:

  • 头文件(.h, .hpp等…)
  • 库文件(。a, .lib等)

一旦你得到了你的头文件和库文件,你需要把它们放在编译器可以找到的地方。这个位置将根据您的操作系统、环境变量和编译器配置而有所不同。

现在它们在编译器可以找到的地方,你需要告诉编译器使用它们。头文件与#include命令一起使用,库文件通过向编译器提供参数来链接。

在幕后,dev - c++使用MinGW GNU GCC编译器,它调用了一个类似于g++ file1.cpp file2.cpp ... filen.cpp -o filename的命令,告诉程序g++编译一个名为"filename"的c++可执行文件,使用文件1到n。还有其他标志可以添加到g++中,例如告诉它在哪里搜索和链接什么。

编译时CSimpleSocket库的名称是"clsocket",所以我们需要找到一种方法来配置dev - c++以将-lclsocket添加到g++命令中。我不使用dev - c++,所以我不能在这里帮助你,但你可能正在寻找"链接选项"或类似的东西在你的编译配置。您还需要确保。lib和。h文件位于搜索路径中,这也应该在dev - c++中进行配置。

CSimpleSocket还提供了一个安装程序,它应该自动创建。lib文件,并将。lib和。h放在可以找到的地方,您应该考虑使用该安装程序。

我认为这个答案的复杂性凸显了c++库集成生态系统的糟糕状态。遗憾的是,在编写本文时,c++中还没有"模块"的概念。

相关文章: