2013-05-06 43 views
2

我配置了MinGW和ICU-Project源,如圖所示there帶MinGW和Netbeans的ICU項目 - 未定義參考

我試圖編譯這段代碼:

#include <cstdlib> 
#include <stdio.h> 
#include <iostream> 
#include <timezone.h> 
#include <inttypes.h> 
#include <string> 
#include <unistr.h> 
using namespace std; 
int main(int argc, char** argv) { 
    UnicodeString id; 
    TimeZone* tz = TimeZone::createTimeZone(id); 
    int32_t raw,dst; 
    int64_t when = 1367836520*U_MILLIS_PER_SECOND; 
    UErrorCode ec = U_ZERO_ERROR; 
    tz->getOffset((UDate)when,FALSE,raw,dst,ec); 
    cout<<raw<<endl; 
    cout<<dst<<endl; 
} 

,我得到以下編譯器錯誤:

"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf 
make[1]: Entering directory `/c/Users/Florian/Documents/NetBeansProjects/CppApplication_1' 
"/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/MinGW-Windows/cppapplication_1.exe 
make[2]: Entering directory `/c/Users/Florian/Documents/NetBeansProjects/CppApplication_1' 
mkdir -p build/Debug/MinGW-Windows 
rm -f build/Debug/MinGW-Windows/main.o.d 
g++ -c -g -I../../../../../MinGW/msys/1.0/local/include/unicode -I../../../../../MinGW/msys/1.0/local/include -MMD -MP -MF build/Debug/MinGW-Windows/main.o.d -o build/Debug/MinGW-Windows/main.o main.cpp 
main.cpp: In Funktion �int main(int, char**)�: 
main.cpp:27:31: Warnung: Ganzzahl�berlauf in Ausdruck [-Woverflow] 
mkdir -p dist/Debug/MinGW-Windows 
g++  -o dist/Debug/MinGW-Windows/cppapplication_1 build/Debug/MinGW-Windows/main.o 
build/Debug/MinGW-Windows/main.o: In function `main': 
C:\Users\Florian\Documents\NetBeansProjects\CppApplication_1/main.cpp:24: undefined reference to `icu_51::TimeZone::createTimeZone(icu_51::UnicodeString const&)' 
C:\Users\Florian\Documents\NetBeansProjects\CppApplication_1/main.cpp:31: undefined reference to `icu_51::UnicodeString::~UnicodeString()' 
C:\Users\Florian\Documents\NetBeansProjects\CppApplication_1/main.cpp:31: undefined reference to `icu_51::UnicodeString::~UnicodeString()' 
build/Debug/MinGW-Windows/main.o: In function `ZN6icu_517UObjectC2Ev': 
C:\Users\Florian\Documents\NetBeansProjects\CppApplication_1/../../../../../MinGW/msys/1.0/local/include/unicode/uobject.h:221: undefined reference to `vtable for icu_51::UObject' 
build/Debug/MinGW-Windows/main.o: In function `ZN6icu_5111ReplaceableC2Ev': 
C:\Users\Florian\Documents\NetBeansProjects\CppApplication_1/../../../../../MinGW/msys/1.0/local/include/unicode/rep.h:240: undefined reference to `vtable for icu_51::Replaceable' 
build/Debug/MinGW-Windows/main.o: In function `ZN6icu_5113UnicodeStringC1Ev': 
C:\Users\Florian\Documents\NetBeansProjects\CppApplication_1/../../../../../MinGW/msys/1.0/local/include/unicode/unistr.h:3615: undefined reference to `vtable for icu_51::UnicodeString' 
collect2.exe: Fehler: ld gab 1 als Ende-Status zur�ck 
make[2]: *** [dist/Debug/MinGW-Windows/cppapplication_1.exe] Error 1 
make[2]: Leaving directory `/c/Users/Florian/Documents/NetBeansProjects/CppApplication_1' 
make[1]: *** [.build-conf] Error 2 
make[1]: Leaving directory `/c/Users/Florian/Documents/NetBeansProjects/CppApplication_1' 
make: *** [.build-impl] Error 2 

任何想法這些錯誤是什麼意思?

main.cpp:31: undefined reference to `icu_51::UnicodeString::~UnicodeString()' 

這些錯誤是在頭文件中我想使用從ICU項目,是怎麼回事?

+0

顯然有一些lib丟失。檢查文檔,找出你需要鏈接的東西(-lXXX) – Mario 2013-05-06 11:53:41

+0

我試圖用MinGW和Microsoft Visual C++編譯它 - 在Eclipse中編譯它,它使用MS編譯器,但是我需要MinGW,使用相同的庫 – user2071938 2013-05-07 10:35:05

+0

你不能在mingw中使用MS預編譯庫。 – 2013-05-08 21:02:40

回答

-1

你錯誤的原因:

main.cpp:31: undefined reference to `icu_51::UnicodeString::~UnicodeString()' 

意味着有遺漏的命名方法的定義。例如,這裏是拋出這種錯誤的準系統C++程序:

#include <iostream> 
using namespace std; 
class utilities{ 
public: 
    void myfunction(); 
}; 
int main() { 
    utilities util; 
    util.myfunction(); 
    return 0; 
} 

拋出錯誤:

main.cpp:11: undefined reference to `utilities::myfunction()' 

注意,公用事業:: MyFunction的是從來沒有定義。要解決這個問題,你必須包含一個缺失函數的定義。像這樣:

#include <iostream> 
using namespace std; 
class utilities{ 
public: 
    void myfunction(); 
}; 
int main() { 
    utilities util; 
    util.myfunction(); 
    return 0; 
} 
void utilities::myfunction(){ 
} 

然後編譯沒有錯誤。

0

我有同樣的問題。

main.cpp:31: undefined reference to `icu_51::UnicodeString::~UnicodeString()'

上面的錯誤意味着鏈接器找不到UnicodeString析構函數的定義。

您必須在您的項目中鏈接相應的庫:icuin(由於undefined reference to icu_51::TimeZone::createTimeZone),icuuc(由於undefined reference to icu_51::UnicodeString::~UnicodeString())。我不得不鏈接icudt以及。

在路徑/ to/icu/lib目錄中查找適當的庫名稱。例如,對於靜態icu,它們是:sicuuc,sicuin,sicust等。