2010-02-16 30 views
7

Tôi đang cố gắng sử dụng regex tăng cường trong chương trình của mình sự cố là tôi gặp phải lỗi này ... bước cài đặt duy nhất tôi đã được thêm vào: "C: \ Program Files \ tăng \ boost_1_42" vào bổ sung bao gồm Thư mục ...lỗi nghiêm trọng LNK1104: không thể mở tệp 'libboost_regex-vc90-mt-gd-1_42.lib'

tôi đang sử dụng VS2008 ...

cố gắng để thực hiện điều này:

#include <iostream> 
#include <string> 
#include <boost/regex.hpp> 

using namespace std; 

int main() { 

    std::string s, sre; 
    boost::regex re; 
    boost::cmatch matches; 

    while(true) 
    { 
     cout << "Expression: "; 
     cin >> sre; 
     if (sre == "quit") 
     { 
     break; 
     } 

     cout << "String:  "; 
     cin >> s; 

     try 
     { 
     // Assignment and construction initialize the FSM used 
     // for regexp parsing 
     re = sre; 
     } 
     catch (boost::regex_error& e) 
     { 
     cout << sre << " is not a valid regular expression: \"" 
       << e.what() << "\"" << endl; 
     continue; 
     } 
     // if (boost::regex_match(s.begin(), s.end(), re)) 
     if (boost::regex_match(s.c_str(), matches, re)) 
     { 
     // matches[0] contains the original string. matches[n] 
     // contains a sub_match object for each matching 
     // subexpression 
     for (int i = 1; i < matches.size(); i++) 
     { 
      // sub_match::first and sub_match::second are iterators that 
      // refer to the first and one past the last chars of the 
      // matching subexpression 
      string match(matches[i].first, matches[i].second); 
      cout << "\tmatches[" << i << "] = " << match << endl; 
     } 
     } 
     else 
     { 
     cout << "The regexp \"" << re << "\" does not match \"" << s << "\"" << endl; 
     } 
    } 
} 

vấn đề có vẻ là vấn đề ? bất kỳ cài đặt bổ sung nào phải được thực hiện?

Trả lời

14

Một số thư viện Boost phải được tạo; Đây là một trong số họ. Đây là cách bạn có thể xây dựng cho họ:

Tạo một file mới có tên gọi boost_build.bat, và bên trong đặt:

bjam toolset=msvc-9.0 variant=release threading=multi link=static define=_SECURE_SCL=0 define=_HAS_ITERATOR_DEBUGGING=0 
bjam toolset=msvc-9.0 variant=debug threading=multi link=static 

Note 9.0 đề cập đến VS 2008. (10,0 trong năm 2010, 8,0 năm 2005, 7.1 cho 2003, 6.0 cho, tốt, 6.0). Một khi bạn đã làm điều này:

  1. Extract build_boost.bat để <boost_root>

  2. Go to: <boost_root>\tools\jam Và chạy build_dist.bat

  3. Sao chép <boost_root>\tools\jam\stage\bin.ntx86\bjam.exe để <boost_root>

  4. Run boost_build.bat

  5. Thư viện được đặt tại <boost_root>\stage\lib

Lưu ý, đây là phương pháp của riêng tôi. Tôi sẽ yêu thích nếu ai đó nói một cách dễ dàng hơn hoặc một số liên kết từ Boost; có vẻ khó tìm được hướng dẫn xây dựng thích hợp từ Boost.

Sau khi được xây dựng, hãy đảm bảo bạn cho trình biên dịch biết vị trí các thư viện nằm trong thư mục VC của bạn (đường dẫn thư viện); thêm "<boost_root>\stage\lib".


Trong bjam định nghĩa, tôi có _SECURE_SCL=0_HAS_ITERATOR_DEBUGGING=0 cho phát hành. Thao tác này sẽ vô hiệu hóa tất cả kiểm tra trình vòng lặp trong Bản phát hành bản phát hành, để cải thiện tốc độ.

+0

vẫn cùng một lỗi ... 1> LINK: fatal error LNK1104: không thể mở tập tin 'libboost_regex-vc90-mt-gd-1_42.lib' đã làm chính xác như u nói ... – kaycee

+0

ok nó hoạt động .. được thêm vào trình liên kết "C: \ Program Files \ boost \ boost_1_42 \ stage \ lib \ libboost_regex-vc90-mt-gd-1_42.lib" – kaycee

+0

'_HAS_ITERATOR_DEBUGGING' chỉ áp dụng cho các bản dựng Gỡ lỗi. Tuy nhiên, đối với '_SECURE_SCL', bạn có gặp phải vấn đề khi trộn các thư viện đã được kích hoạt với các thư viện bị vô hiệu hóa không? –

1

Bạn đã cài đặt phiên bản gỡ lỗi đa luồng của Boost chưa? Nếu không, xin hãy làm như vậy. Nếu không, hãy kiểm tra đường dẫn thư viện của bạn (trong tùy chọn dự án) để nó bao gồm đường dẫn đến tệp được đề cập trong thông báo lỗi.

2

Trên Windows, cách dễ nhất để tăng thư viện nhị phân là chạy installer from BoostPro consulting. Hãy chắc chắn chọn phiên bản Visual Studio của bạn và chọn hộp cho thư viện regex trong khi cài đặt.

+0

Cài đặt nguồn mặc định sẽ đủ dễ dàng nếu chúng không tùy ý làm những việc ngu ngốc như tạo một tập tin dơi bạn bấm vào đó KHÔNG LÀM toàn bộ công việc. Tại sao các lập trình viên không thể tạo ra các công cụ mà chỉ làm việc lần đầu tiên, và theo nguyên lý ít kinh ngạc nhất. Trình cài đặt của BoostPro rất tốt, tôi chỉ phàn nàn về việc tải xuống tệp zip của trang web tăng cường. Dường như với tôi họ chỉ cần thả chúng và đặt một liên kết đến một cài đặt thực sự. Tất nhiên, BoostPro đã chết hoặc chết nên câu trả lời này sẽ không còn tồn tại nữa. –

0

Tôi không chắc chắn về cài đặt xác định, nhưng tôi đã có thể tăng cường để xây dựng với MSVC 9.0 bằng cách chạy tệp hàng loạt <boostroot>\bootstrap, sau đó chỉnh sửa <boostroot>\project-config.jam tệp như sau. Thay đổi dòng:

using mvsc 

tới:

using msvc : 9.0 : cl.exe 

sau đó chạy .\b2 install và các tiêu đề thúc đẩy và các thư viện được xây dựng và cài đặt để c:\boost.

Các vấn đề liên quan