在我的c++应用程序中包含第三方代码时遇到麻烦
Trouble including third-party code in my C++ application
我试图将一些网络代码包含到我的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++中还没有"模块"的概念。
- 编译包含字符串的代码时遇到问题
- 代码在我的计算机上运行良好,但是在将其提交给coursera时遇到未知的信号11问题
- 我在 C++ 代码中遇到错误警告:控制到达非空函数 [-Wreturn 类型] 的末尾
- 我遇到了这个代码片段,不明白. 它递归检查 C++ 字符串中是否存在大写字符
- 我在使用 boost::serialization 时遇到了一个问题,我的代码在 Linux 中运行良好,但在 Wind
- 我在 2D 数组的动态内存分配中遇到了一些奇怪的代码C++? 请解释一下这是什么?
- 在visual Studio中构建代码时,我遇到错误,.h文件丢失
- 我的代码运行良好,但现在当尝试将其制作成模板时,我遇到了许多看似无关的错误。这是怎么回事?
- 我的期末考试遇到了麻烦.代码不断循环回到我的订购菜单,不会显示我的总价
- 在 NS3 中遇到了以下代码行.需要帮助理解它
- 在 JS 中通过 Emscripten 获取 SDL 代码C++时遇到问题
- 我在编写从文本文件中读取数据并按升序打印的代码时遇到问题
- 我遇到了一些C++代码.为什么我们必须在块中使用 *this 而不是这个
- 我在 MinGW 和 VS 代码"g++ not recognized as a cmdlet..."时遇到构建错误
- 当我的代码工作正常时,为什么在SPOJ中遇到运行时(Sigabrt)错误
- 为什么尝试这样的类代码时会遇到错误?我初学者对不起
- 我在让我的代码输出整个链表时遇到问题.它只是输出我修改过的一些文本文件,而不是整个东西
- 我在DFS搜索(树)代码中遇到麻烦.我如何打破递归
- 在我的代码覆盖本身时遇到麻烦,我不确定为什么
- 我在这个数组代码上遇到了问题,它应该输出用户之前输入的所有数字