【问题标题】:ICU-Project with MinGW and Netbeans - undefined reference带有 MinGW 和 Netbeans 的 ICU 项目 - 未定义的参考
【发布时间】:2013-04-30 03:36:09
【问题描述】:

我配置了 MinGW 和 ICU-Project 源,如 there 所示。

我试图编译这段代码:

#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-Project 使用的头文件中,这是怎么回事?

【问题讨论】:

  • 显然缺少一些库。检查文档以了解您必须链接的内容 (-lXXX)
  • 我尝试使用 MinGW 和 Microsoft Visual c++- Eclipse 中的编译器与 MS 编译器进行编译,但我需要 MinGW,使用相同的库
  • 您不能将 MS 预编译的库与 mingw 一起使用。
  • 谢谢这个问题,我也有同样的问题。从到目前为止发布的所有内容来看,@moskito-x 的评论似乎是原因。然后我们必须为 MinGW 编译我们自己的 ICU。你现在有成功吗?

标签: c++ netbeans mingw undefined-reference icu


【解决方案1】:

我遇到了同样的问题。

main.cpp:31:未定义对 `icu_51::UnicodeString::~UnicodeString()' 的引用

上面的错误表示链接器找不到UnicodeString析构函数的定义。

你必须在你的项目中链接相应的库:icuin(由于undefined reference to icu_51::TimeZone::createTimeZone),icuuc(由于undefined reference to icu_51::UnicodeString::~UnicodeString())。

我也必须链接 icudt。

在您的 path/to/icu/lib 目录中查找正确的库名称。例如对于静态 icu,它们是:sicuuc、sicuin、sicust 等。

【讨论】:

    【解决方案2】:

    你的错误原因:

    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(){   
    }
    

    然后它编译没有错误。

    【讨论】:

      猜你喜欢
      • 2019-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 2018-02-25
      相关资源
      最近更新 更多