2013-04-10 129 views
1

我試圖在C++程序中使用C庫。 我想將庫libcoap.a鏈接到我的程序。我已經在Qt中製作了一個巨大的程序,所以無法使用make來代替qmake。在Qt C++中未定義對庫方法的引用

作爲一個簡單的例子,我做了下面的代碼。

connection.h:

#include <string> 
#include "coap.h" 
void sendData(std::string); 

connection.cpp:

#include "connection.h" 
#include "coap.h" 
coap_uri_t uri; 

void sendData(std::string ip){ 
    coap_split_uri((unsigned char *)ip.c_str(), strlen(ip.c_str()), &uri); 
} 

main.cpp中:

#include "connection.h" 

using namespace std; 

int main() 
{ 
    sendData("[aaaa::c30c:0:0:2]/sen/lt"); 
    return 0; 
}  

coaptester.pro:

TEMPLATE = app 
CONFIG += console 
CONFIG -= qt 

unix:!macx:!symbian: LIBS += -L$$PWD/../commTest/commTest/libcoap-4.0.1/ -lcoap 

INCLUDEPATH += $$PWD/../commTest/commTest/libcoap-4.0.1 
DEPENDPATH += $$PWD/../commTest/commTest/libcoap-4.0.1 

unix:!macx:!symbian: PRE_TARGETDEPS += $$PWD/../commTest/commTest/libcoap-4.0.1/libcoap.a 

SOURCES += main.cpp \ 
    connection.cpp 
HEADERS += \ 
    connection.h 

我總是得到同樣的錯誤:

undefined reference to `coap_split_uri(unsigned char*, unsigned int, coap_uri_t*)' 
collect2: ld returned 1 exit status 

在此先感謝。

+2

那麼用extern「C」包圍#include「coap.h」怎麼樣? – 2013-04-10 12:26:15

回答

2

嘗試使用(在connection.h)

extern "C" { 
    #include "coap.h" 
} 

此外,它是多餘的,包括coap.h無論是在connection.hconnection.cpp(如果coap.h沒有包括檢查可執行文件的尺寸將是無用地更大),所以將其從.cpp中移除。

+1

看到優秀的解釋[這裏](http://stackoverflow.com/questions/1041866/in-c-source-what-is-the-effect-of-extern-c) – Floris 2013-04-10 12:54:22