2013-05-06 48 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等。