lỗi nghiêm trọng LNK1104: không thể mở tệp 'libboost_system-vc110-mt-gd-1_51.lib'


88

Có vẻ như tôi không thể làm việc này. Tôi đã tạo một ứng dụng bảng điều khiển đơn giản (phụ thuộc vào websocket++thư viện) cần Boostthư viện .. nhưng khi tôi cố gắng biên dịch, tôi nhận được:

lỗi nghiêm trọng LNK1104: không thể mở tệp 'libboost_system-vc110-mt-gd-1_51.lib'

Tuy nhiên, tôi đã thực hiện bjam tạo lib trong (boost_root)/stage/libsvà tôi liên kết đường dẫn đến lib với trình biên dịch C++/Additionnals includes.

Nếu tôi tìm trong (boost_root)/stage/libshồ sơ libboost_system-vc110-mt-gd-1_51.libthì không có. Nó được gọi libboost_system-vc110-mt-sgd-1_51.libthay thế.

Bất kỳ ý tưởng?


1
Tôi đã có thể tạo tệp libboost_system-vc110-mt-gd-1_51.lib đang thực hiện xây dựng hoàn chỉnh với bjam tuy nhiên tôi vẫn gặp lỗi.
Rushino

22
Mở VS2012 developer command prompt, đi tới thư mục gốc tăng cường của bạn và nhập bootstrap, sau đó nhập b2và bạn sẽ nhận được một bộ tệp thư viện hoàn chỉnh.
Jesse Good

Bạn đã thêm đường dẫn bao gồm và đường dẫn trình liên kết vào dự án của mình chưa?
Jesse Good

1
Bạn có đang xây dựng ứng dụng của mình với /MD?
Mahesh

Nếu đó là okay để tải về thay vì biên dịch, có libs từ đây: code.ingres.com/boostlib/trunk/stage/lib
gorogm

Câu trả lời:


93

Tham số C ++ → Chung → Thư mục Bao gồm Bổ sung là để liệt kê các thư mục nơi trình biên dịch sẽ tìm kiếm các tệp tiêu đề.

Bạn cần cho trình liên kết biết nơi tìm thư viện để liên kết đến. Để truy cập cài đặt này, nhấp chuột phải vào tên dự án trong cửa sổ Giải pháp Explorer , sau đó nhấp vào Thuộc tính → Trình liên kết → Chung → Thư mục Thư viện bổ sung . Nhập vào <boost_path>\stage\libđây (đây là đường dẫn nơi chứa các thư viện nếu bạn xây dựng Boost bằng các tùy chọn mặc định).


u có thể giải thích cho tôi những boost_path là gì
ggsmartboy

1
@ggsmartboy Đó là đường dẫn chứa các tệp nguồn tăng cường (cùng đường dẫn mà bạn liệt kê trong trình biên dịch bao gồm các đường dẫn để nó có thể tìm thấy các tiêu đề tăng cường). Câu trả lời giả định rằng bạn đã tự xây dựng tăng cường (không sử dụng bản phân phối) bằng cách sử dụng các tùy chọn xây dựng mặc định.
Praetorian

Tuyệt vời. Tiết kiệm cho tôi một cơn đau đầu thực sự quá. Tại sao tôi dường như không thể tìm thấy điều này trong tài liệu tăng cường (nếu nó thậm chí ở đó), tôi không biết! :)
vắng mặt

2
Các cài đặt được đề cập trong câu trả lời này được tìm thấy nếu bạn nhấp chuột phải vào dự án và chọn thuộc tính (đối với những người không có như tôi, nhấp chuột phải vào giải pháp, đi tới Công cụ> Tùy chọn, v.v. Tuy nhiên, những tùy chọn đó không có trên tất cả các dự án của tôi). VS2013
Mr_and_Mrs_D

1
@Mr_and_Mrs_D Bạn nói đúng, tôi cho rằng người đọc đã biết phần đó. Đã cập nhật.
Praetorian

97

Đây là cách đơn giản nhất cho một người nghiệp dư như tôi, những người đang tự học C ++:

Đầu tiên Giải nén thư viện tăng cường vào bất kỳ thư mục nào bạn chọn. Tôi giới thiệu c:\directory.

  1. Mở C ++ trực quan của bạn.
  2. Tạo một dự án mới.
  3. Nhấp chuột phải vào dự án.
  4. Bấm vào tài sản.
  5. Nhấp vào C / C ++.
  6. Nhấp vào chung.
  7. Chọn thêm thư viện bao gồm.
  8. Bao gồm điểm đến thư viện. vd c:\boost_1_57_0.
  9. Nhấp vào tiêu đề trình biên dịch trước.
  10. Nhấp vào tạo / sử dụng tiêu đề được biên dịch trước.
  11. Chọn không sử dụng tiêu đề được biên dịch trước.

Sau đó, hãy truy cập thư viện liên kết nếu bạn gặp sự cố của mình.

  1. Tới là tệp được giải nén là c:\boost_1_57_0.
  2. Nhấp vào booststrap.bat(không cần nhập vào cửa sổ lệnh, chỉ cần đợi và đừng đóng cửa sổ đó là nơi tôi gặp vấn đề mà tôi đã mất hai tuần để giải quyết. Sau một thời gian, booststrapnó sẽ chạy và tạo ra cùng một tệp, nhưng bây giờ với hai tên khác nhau:, b2bjam.
  3. Nhấp vào b2và đợi nó chạy.
  4. Nhấp vào bjamvà đợi nó chạy. Sau đó, một thư mục sẽ được gọi ra stage.
  5. Nhấp chuột phải vào dự án.
  6. Bấm vào tài sản.
  7. Nhấp vào trình liên kết.
  8. Nhấp vào chung.
  9. Nhấp vào bao gồm thư mục thư viện bổ sung.
  10. Chọn một phần của thư viện, ví dụ c:\boost_1_57_0\stage\lib.

Và bạn tốt để đi!


3
Cảm ơn Wu Jie rất nhiều - Tôi chưa bao giờ làm bất cứ điều gì như thế này trước đây và các bước này chính xác là những gì tôi cần để xây dựng Boost và tạo tệp thư viện 'libboost_serialization-vc140-mt-gd-1_57.lib' bị thiếu Tôi đã gặp sự cố khi liên kết: )
Vixxd

5
Cảm ơn, tôi thích hướng dẫn chi tiết tốt đẹp. Đối với bước 2/3/4 của quá trình thiết lập boost, thay vào đó, những gì tôi đã làm là: a) mở dòng lệnh nhắc làm root ; b) thay đổi thành thư mục boost_1_57_0; c) loại bootstrap.bat(mất 10-20 giây); d) nhập ./b2theo hướng dẫn (sau đó mất 30-40 phút để hoàn thành).
Darren Cook

1
Tôi phải mở bootstrap.bat bằng dấu nhắc lệnh Visual Studio, vì dấu nhắc lệnh thông thường không biết cách xử lý lệnh 'cl'.
jlaverde

20/02/2018, giải pháp của bạn phù hợp với tôi (VS2017 + Boost 1.66). Cảm ơn bạn rất nhiều.
CaTx 20/02/18

Cảm ơn bạn về các bước dành cho người mới bắt đầu. Chúc mọi người luôn đưa ra câu trả lời như bạn đã đưa ra.
Mudit Jain

6

Tôi đã từng gặp vấn đề tương tự. Nguyên nhân là do tôi đã biên dịch Boost với Visual C ++ 2010 (v100) và tôi đã cố gắng sử dụng thư viện với Visual Studio 2012 (v110) do nhầm lẫn.

Vì vậy, tôi đã thay đổi cấu hình (trong Visual Studio 2012) đi đến Thuộc tính dự án -> Chung -> Bộ công cụ Plataform và thay đổi giá trị từ Visual Studio 2012 (v110) thành Visual Studio 2010 (v100) .


7
Tôi hy vọng bạn nhận ra rằng khi bạn thay đổi bộ công cụ nền tảng để sử dụng v100, bạn đang yêu cầu VS2012 IDE sử dụng trình biên dịch đi kèm với VS2010. Bất kỳ tính năng C ++ 11 nào đã được thêm vào trình biên dịch VS2012 sẽ không khả dụng. Một giải pháp tốt hơn là biên dịch Boost bằng trình biên dịch VS2012; bạn có thể có các thư viện được tạo từ cả năm 2010 và 2012 cùng tồn tại vì Boost đặt số phiên bản trình biên dịch vào tên tệp đầu ra.
Praetorian

Bạn đúng và tôi biết. Tôi sợ những gì có thể xảy ra nếu tôi nâng cấp các thư viện và trình biên dịch. Vì vậy, khi dự án kết thúc, tôi sẽ sửa chữa tất cả những thứ này. Cảm ơn!
Jota Santos

6

Tuy nhiên, một giải pháp khác:

Tôi đã bối rối vì tôi đã đưa boost_regex-vc120-mt-gd-1_58.lib vào thuộc tính Liên kết-> Phụ thuộc Bổ sung của mình, nhưng liên kết liên tục cho tôi biết nó không thể mở libboost_regex-vc120-mt-gd-1_58.lib ( lưu ý tiền tố lib). Tôi đã không chỉ định libboost_regex-vc120-mt-gd-1_58.lib.

Tôi đang cố gắng sử dụng (và đã tạo) các thư viện động boost (.dlls) nhưng chưa xác định macro BOOST_ALL_DYN_LINK. Rõ ràng có những gợi ý trong trình biên dịch để bao gồm một thư viện và nếu không có BOOST_ALL_DYN_LINK, nó sẽ tìm kiếm thư viện tĩnh (có tiền tố lib) chứ không phải thư viện động (không có tiền tố lib).


Vẫn chỉ có 1 lượt ủng hộ, vậy mà tôi lại thấy mình ở đây vài tháng một lần, được nhắc lại rằng giải pháp cho vấn đề của tôi là gì !!
Neil Gatenby

3

Tôi gặp vấn đề tương tự và lỗi của tôi là tôi đã cài đặt binary boost_1_55_0-msvc-11.0-32.exe để sử dụng với visual c ++ 2010 có phiên bản v100 (thuộc tính dự án-> ConfiguratioProperties-> General-> platformTooset) không phải v110 như visual c ++ 2012. Vì vậy, tôi đã tải xuống boost_1_55_0-msvc-10.0-32.exe và bây giờ mọi thứ đều ổn.


2

Trong trường hợp bạn gặp khó khăn khi xây dựng boost hoặc không muốn làm điều đó, một giải pháp thay thế là tải xuống các tệp lib từ SourceForge . Liên kết sẽ đưa bạn đến một thư mục chứa các tệp lib và dll đã nén cho phiên bản 1.51. Tuy nhiên, bạn sẽ có thể chỉnh sửa liên kết để chỉ định phiên bản lựa chọn. Rõ ràng trình cài đặt từ BoostPro có một số vấn đề.


2

Tôi đã gặp sự cố tương tự khi cố gắng sử dụng thử nghiệm đơn vị thúc đẩy trong Visual Studio 2015 (Phiên bản cộng đồng):

lỗi nghiêm trọng LNK1104: libboost_unit_test_framework-vc140-mt-1_57

vì vậy tôi nghĩ tôi sẽ chia sẻ giải pháp của mình.

Bạn có thể tạo một dự án thử nghiệm đơn vị thúc đẩy theo hai cách (và giải pháp này hoạt động cho cả hai):

  1. sử dụng Bộ điều hợp kiểm tra bộ tăng cường
  2. hoặc bằng cách tạo Ứng dụng Bảng điều khiển Win32 ( các bước tại đây ) và thay thế chức năng chính bằng chức năng kiểm tra đơn vị tăng cường ( các bước tại đây ).

Dưới đây là các bước tôi đã làm theo để cả hai dự án hoạt động:

Trước tiên, hãy tải xuống phiên bản tăng cường mong muốn (ví dụ: boost_1_57_0 ). Bạn có thể tải xuống boost với các tệp nhị phân chính xác (được biên dịch bằng msvc v140) hoặc tự giải nén các tệp nhị phân bằng cách chạy các lệnh sau từ dòng lệnh:

  1. bootstrap.bat
  2. "C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ vcvarsall.bat" x86
  3. bjam --clean
  4. bjam -j4 --debug-Symbol = on --build-type = complete toolset = msvc-14.0 threading = multi runtime-link = shared address-model = 32

Trong đó msvc-14.0 chỉ định rằng chúng tôi yêu cầu phiên bản Visual Studio 2015 (VS 2015 = v14.0 = v140) và address-model = 32 chỉ định rằng chúng tôi yêu cầu nền tảng 32 (nhưng điều này cũng có thể được thực hiện cho 64 bit).

Sau khi bạn có mã nhị phân, hãy chuyển đến Visual Studio, chọn dự án Boost Unit Testing mà bạn đã tạo. Đi tới Thuộc tính dự án> cấu hình (từ menu chính) và thực hiện các lựa chọn sau:

  • Đặt " Chung> Bộ công cụ nền tảng " thành Visual Studio 2015 (v140).

  • Bao gồm đường dẫn đến thư mục boost (ví dụ: C: \ boost_1_57_0) và đường dẫn đến thư mục con chứa các tệp nhị phân (ví dụ: C: \ boost_1_57_0 \ stage \ lib) trong:

    • " C \ C ++> Thư mục bao gồm bổ sung "
    • và "Trình liên kết> Thư mục Thư viện Bổ sung ".

1

b2 -j% core% toolset =% msvcver% address-model = 64 architecture = x86 link = static threading = multi runtime-link = shared --build-type = Minimum stage --stagedir = stage / x64

Thuộc tính → Trình liên kết → Chung → Thư mục Thư viện bổ sung $ (BOOST) \ stage \ x64 \ lib


Chi tiết hơn một chút về những dòng đó đang làm gì và tại sao -> sẽ giúp cải thiện chất lượng của câu trả lời này.
Anton Menshov

0

Tôi đã có cùng một vấn đề được báo cáo ở đây. Tôi đã giải quyết vấn đề khi di chuyển mainTest.cpp từ thư mục con src / mainTest / sang thư mục chính src / Tôi đoán đây cũng là vấn đề của bạn.


0

2>LINK : fatal error LNK1104: cannot open file 'libboost_regex-vc120-mt-sgd-1_55.lib

Trong trường hợp của tôi, bootstrap / bjam không khả dụng (các thư viện đã được biên dịch trước và cam kết với SCM) trên dự án kế thừa cũ. Các thư viện không có phiên bản VC hoặc BOOST trong tên tệp của chúng, ví dụ:, libboost_regex-mt-sgd.libtuy nhiên Processed /DEFAULTLIB:libboost_regex-vc120-mt-sgd-1_55.libbằng cách nào đó đã được kích hoạt tự động.

Đã khắc phục bằng cách thêm thủ công tên tệp không có phiên bản vào:

<AdditionalDependencies>$(DK_BOOST)\lib64\libboost_regex-mt-sgd.lib</AdditionalDependencies>

và danh sách đen những ...vc120-mt-sgd-1_55.libtrong

<IgnoreSpecificDefaultLibraries>libboost_regex-vc120-mt-sgd-1_55.lib</IgnoreSpecificDefaultLibraries>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.