2015-01-17 39 views
0

我試圖建立其使用Eclipse泛美衛生組織MQTT庫中的Visual C++ Win 32項目在Visual C++的Win32項目時 - 見https://eclipse.org/paho/clients/c/ 庫中取得的2個文件形式:LNK2019錯誤編譯與Eclipse泛美衛生組織MQTT

  • 泛美衛生組織,mqtt3c.lib
  • 泛美衛生組織,mqtt3c.dll

庫最初是用C寫的 - 我與預編譯的二進制嘗試和編譯它自己的時候。

在我的客戶端Visual C++項目中,在鏈接器選項下,我在「附加庫依賴」字段中直接在「附加庫目錄」字段和paho-mqtt3c.lib文件中包含了正確的庫路徑。但是當我嘗試構建時,鏈接器會爲每個使用的庫函數發出一個錯誤。所有錯誤都有着相似的格式:

錯誤2錯誤LNK2019:無法解析的外部符號 「INT __cdecl MQTTClient_connect(void *的,結構MQTTClient_connectOptions *)」 函數_mainÇ引用(MQTTClient_connect @@ YAHPAXPAUMQTTClient_connectOptions @@@ Z?) :\項目\剪貼簿\ MQTT_Example \ MQTT_Example \ main.obj MQTT_Example

我的代碼如下:

#include <MQTTClient.h> 
#include <MQTTClientPersistence.h> 

: : : 

// Start MQTT connection 
MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer; 
MQTTClient_message pubmsg = MQTTClient_message_initializer; 
MQTTClient_deliveryToken token; 

// Convert CString to char* 
int connectResponse; 
char* szBuf = strBroker.GetBuffer(strBroker.GetLength()) ; 

// Create client 
MQTTClient_create(&client, szBuf, "MQTTTestClient", MQTTCLIENT_PERSISTENCE_NONE, NULL); 

conn_opts.keepAliveInterval = 20; 
conn_opts.cleansession = 1; 

MQTTClient_setCallbacks(client, NULL, NULL, msgarrvd, NULL); 

// Connect to broker 
if ((connectResponse = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) 
{ 
    // Oops.. that didn't work! 
} 

有沒有人有關於如何解決這個任何想法? (我知道有數百萬LNK2019的問題,但我找不到任何解決我的問題到目前爲止......)

回答

1

所以事實證明,問題是,我試圖包括一個C庫​​(有大量的C樣式聲明的函數)在C++項目中。

的解決方案是在extern「C」塊以包裹函數聲明(即,其中的頭文件被包括):

extern "C"{ 
#include <MQTTClient.h> 
#include <MQTTClientPersistence.h> 
} 

這告訴鏈接器向C而不是C++函數鏈接。

相關問題