繁体   English   中英

麻烦包括我的C ++应用程序中的第三方代码

[英]Trouble including third-party code in my C++ application

我正在尝试将一些网络代码包含到我的C ++应用程序中。 我下载了CSimpleSocket并将所有.h和.cpp文件复制到我的主文件所在的目录中。 然后我尝试包含其中一个标题,但是链接器只是阻止了一堆错误,例如:

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

和别的。 一切都在一个目录中,所以我认为这不是问题所在。 我用来包含的代码是#include "PassiveSocket.h" 我正在使用Dev-C ++,如果这有任何区别的话。 我不明白我做错了什么,所以如果有人能帮助我,那就太好了。

如果这是一个非常愚蠢的问题,请原谅我,但我正在努力学习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 ++中没有“模块”的概念。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM