Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: [GCC-Mingw32] STLport 5.1.0 Problem

  1. #1
    Ngày gia nhập
    11 2006
    Bài viết
    75

    Mặc định [GCC-Mingw32] STLport 5.1.0 Problem

    Tôi cần cài STLport cho Gcc - Mingw32 vì thằng STL mặc định của nó không hỗ trợ được Unicode nên không thể xài SmartWin. Mọi chuyện đều diễn ra khá "suôn sẻ" nhưng đến khi thử biên dịch chương trình thì lại có lỗi liên kết (linker errors):

    Code:
    //Environment: DevC++ 5.0 (4.9.9.2)
    //Compiler: Gcc-mingw32 compiler (version 3.4.2)
    
    #include <stlport/cstdlib>
    #include <stlport/iostream>
    
    using namespace _STLP_STD;
    
    int main(int argc, char *argv[])
    {
        // cout << "Test STLport" << endl; --> nếu comment dòng này thì không bị lỗi liên kết, chương trình compile như bình thường
    
        system("PAUSE");
        return 0;
    }
    Lỗi liên kết cụ thể như sau:

    Code:
      [Linker Error] undefined reference to `_imp___ZN11stlpmtx_std4coutE' 
      [Linker Error] undefined reference to `_imp___ZN11stlpmtx_std8ios_base16_M_throw_failureEv'
    Tôi mới dùng thằng STLport này nên cũng chưa hiểu rõ nó lắm. Bác nào có kinh nghiệm rùi xin cho vài lời tư vấn.

    Thanks in advance.
    Our dreams are young and we both know they take us where we want to go...

  2. #2
    Ngày gia nhập
    10 2006
    Bài viết
    4

    Trích dẫn Nguyên bản được gửi bởi ilovecplusplus
    Tôi cần cài STLport cho Gcc - Mingw32 vì thằng STL mặc định của nó không hỗ trợ được Unicode nên không thể xài SmartWin. Mọi chuyện đều diễn ra khá "suôn sẻ" nhưng đến khi thử biên dịch chương trình thì lại có lỗi liên kết (linker errors):

    Code:
    //Environment: DevC++ 5.0 (4.9.9.2)
    //Compiler: Gcc-mingw32 compiler (version 3.4.2)
    
    #include <stlport/cstdlib>
    #include <stlport/iostream>
    
    using namespace _STLP_STD;
    
    int main(int argc, char *argv[])
    {
        // cout << "Test STLport" << endl; --> nếu comment dòng này thì không bị lỗi liên kết, chương trình compile như bình thường
    
        system("PAUSE");
        return 0;
    }
    Lỗi liên kết cụ thể như sau:

    Code:
      [Linker Error] undefined reference to `_imp___ZN11stlpmtx_std4coutE' 
      [Linker Error] undefined reference to `_imp___ZN11stlpmtx_std8ios_base16_M_throw_failureEv'
    Tôi mới dùng thằng STLport này nên cũng chưa hiểu rõ nó lắm. Bác nào có kinh nghiệm rùi xin cho vài lời tư vấn.

    Thanks in advance.
    Có thể thấy rõ trong quá trình liên kết (linkage) này là do trình biên dịch không tìm được definition tương ứng cho các thư viện của iostream của sltport. Bạn cần phải đảm bảo là bộ thư viện này của stlport đã được biên dịch đầy đủ. Một chú ý trong quá trình cài đặt stlport là bạn cần phải lựa chọn có hay không có stlport iostream implementation. (sử dụng thư viện stlport iostream hay ko) Bạn có thể sẽ phải config lại trong file config.
    Mình copy một đoạn trong file install để giúp cho việc biên dịch lại thư viện này.

    ==== Building STLport iostreams library ==========

    Below are step-by-step instructions to build STLport streams library:

    5) Using appropriate makefile, do "make clean all" to build the STLport libraries
    (makefiles are set up to build several different flavors - debug/nondebug,
    static/dynamic versions).
    Optionally, do "make install" to copy STLport headers and libraries to shared location.

    Note : your "make" program may have different name, like "nmake" for Visual C++.

    Examples :
    1. If you are building STLport for just one compiler, you may do something like that
    (DOS syntax for Visual C++ below):
    copy vc6.mak makefile
    nmake clean all
    nmake install

    2. If you plan to build STLport with multiple compilers, use "make -f" :
    make -f gcc.mak clean install
    make -f sunpro.mak clean install

    This will build and install STLport for gcc & SUN CC.

    "install" target works on most platforms.

    On Win32, it does the following :
    - copies STLport headers in "stlport" subdirectory of your compiler's INCLUDE directory;
    - copies STLport .lib files in your compiler's LIB directory;
    - copies STLport DLLs to Windows system directory so they can be found at runtime.

    On UNIX, it does the following :
    - copies STLport headers in "stlport" subdirectory of system's local include directory (default is /usr/local/include);
    - copies STLport .a and .so files to system local library directory (default is /usr/local/lib);

    6) If build fails, you may choose to :
    - try fixing the build ;
    - wait until somebody else will submit corresponding changes to be incorporated in next STLport
    release/snapshot. To use STLport w/o its own iostreams, please do step 3a).

    In case you do patch STLport, please submit your patches to support@stlport.com or (better)
    to STLport Forum (http://www.stlport.com/cgi-bin/forum/dcboard.cgi)

    7) Do "make install" to install resulting libraries into "./lib" subdirectory.

    ==== Linking your application with STLport library ==========

    8) Supply the "lib" subdirectory to the library search path and add desired
    library to the list of libraries to link with.
    Examples (imagine you have mytest.cpp in the same directory as this file is):
    With gcc : gcc -I./stlport mytest.cpp -L./lib/ -lstlport_gcc
    With DEC CC : cxx -I./stlport mytest.cpp -L./lib/ -lstlport_deccxx
    With SUN CC : CC -I./stlport mytest.cpp -L./lib/ -lstlport_sunpro
    .....
    [ Visual C++ specific ] For VC++, you do not have to specify "stlport-msvc-XXX.lib" explicitly,
    as it is being choosen and forced to link automatically by "#pragma"'s in stlport/config/stl_select_lib.h.
    Appropriate version is being selected based on /MD[d] vs /MT[d] options and __STL_DEBUG setting.
    All you have to do is to set library search path for the linker.
    Example :
    cl.exe /I.\stlport mytest.cpp /link /libpath:.\lib /MD

    9) If you linked your application with shared STLport library (.so or .dll), please make your .so or
    .dll's to be found in PATH at runtime. On Windows, the simplest way to do it
    is to copy all .dll's to Windows system directory. Or, you might choose to add directory
    containing STLport to the PATH environment string.

    10) Have fun !

  3. #3
    Ngày gia nhập
    08 2006
    Nơi ở
    TpHCM
    Bài viết
    202

    quả thực là chưa làm với STLport
    nhưng tò mò thảo luận 1 chút
    mình thấy STL bình thường đã hỗ trợ Unicode với class std::wstring

    không biết tình huống nào mà bạn thấy bộ STL có sẵn không đáp ứng được nhỉ, có thể nói thêm 1 chút được ko?

    mình hay dùng thư viện boost, chưa đụng đến vấn đề Unicode mà không giải được, và trong document của nó khẳng định hỗ trợ hoàn hảo Unicode

    trong version mới của nó có giới thiệu là:
    "New for this release: Support for building with the newest STLport-5.0 was added. The support includes building with MinGW Runtime 3.8 plus STLport-5.0 improved to support wide character operations"

    bạn thử xem

  4. #4
    Ngày gia nhập
    11 2006
    Bài viết
    75

    Cảm ơn sự giúp đỡ của các bạn. Mình đã "xử" xong lỗi này rồi. Pretty simple, just by a predefinition of _STLP_THREADS.

    Code:
    #define _STLP_DEBUG
    #define _STLP_WCHAR_T
    #define _STLP_THREADS //Linker errors occurred because i forgot to define _STLP_THREADS
    
    #include <stlport\cstdlib>
    #include <stlport\iostream>
    #include <stlport\vector>
    
    
    using namespace std;
    
    int main (int argc, char *argv[])
    {
        string sz = "sz";
        vector <wstring> sentences;
        
        sentences.push_back (L"Hello");
        sentences.push_back (L"STLport");
        sentences.push_back (L"Hello");
        sentences.push_back (L"C Viet Community Forum");
        
        cout << sz.c_str() << endl;
        wcout << sentences[0].c_str() << L" " << sentences[1].c_str() << endl;
        wcout << sentences[2].c_str() << L" " << sentences[3].c_str() << endl;
        wcout << L"IT WORKS!!" << endl;
        wcout << L"Good bye and see you again." << endl;
        
        system("PAUSE");
        return EXIT_SUCCESS;
        
    }
    to nguyentuan2: Chắc bạn dùng đồ của MS nên không bị lỗi chứ thằng STL đi kèm với gcc-mingw32 là 100% không hỗ trợ Unicode (luôn bị lỗi liên kết). Điều này đã được thừa nhận trên trang web của nó (www.mingw.org) mà tôi lại cần Unicode cho SmartWin và nhiều thư viện khác nên phải cài thằng STLport vào. Nghe thiên hạ quảng cáo đây là thằng duy nhất có chế độ debug, giúp phát hiện và xử lý lỗi dễ hơn so với của SGI (STLport được based trên STL của SGI).
    Đã được chỉnh sửa lần cuối bởi ilovecplusplus : 28-01-2007 lúc 05:19 AM.
    Our dreams are young and we both know they take us where we want to go...

  5. #5
    Ngày gia nhập
    08 2006
    Nơi ở
    TpHCM
    Bài viết
    202

    quả là như vậy, hóa ra thằng nào cũng base trên SGI

Các đề tài tương tự

  1. Problem giữa excel 2007 và OLEDB
    Gửi bởi mrdavid trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 07-12-2012, 02:34 PM
  2. Lỗi Problem signature khi làm việc với WordTemplate .dotx?
    Gửi bởi pvtam2a trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 0
    Bài viết cuối: 07-11-2011, 03:58 PM
  3. C# Programming: From Problem Analysis to Program Design
    Gửi bởi ventran trong diễn đàn Công cụ, ebooks C#, ASP.NET, và Windows Mobile
    Trả lời: 2
    Bài viết cuối: 14-07-2011, 05:03 PM
  4. Sách lập trình C Data abstraction problem solving with c++. Help!
    Gửi bởi ubersexual82 trong diễn đàn Tài liệu, ebooks và công cụ
    Trả lời: 2
    Bài viết cuối: 07-12-2010, 08:28 PM
  5. TDM's GCC/mingw32
    Gửi bởi haian trong diễn đàn Tài liệu, ebooks và công cụ
    Trả lời: 0
    Bài viết cuối: 01-04-2010, 11:51 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn