簡體   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