ข้อผิดพลาดร้ายแรง LNK1104: ไม่สามารถเปิดไฟล์ 'libboost_system-vc110-mt-gd-1_51.lib'


89

ดูเหมือนว่าฉันไม่สามารถทำงานนี้ได้ ฉันสร้างแอปพลิเคชันคอนโซลง่ายๆ (ซึ่งขึ้นอยู่กับwebsocket++ไลบรารี) ซึ่งต้องการBoostไลบรารี .. แต่เมื่อฉันพยายามรวบรวมฉันได้รับ:

ข้อผิดพลาดร้ายแรง LNK1104: ไม่สามารถเปิดไฟล์ 'libboost_system-vc110-mt-gd-1_51.lib'

แต่ผมไม่ bjam ซึ่งสร้างขึ้นใน lib (boost_root)/stage/libsและฉันเชื่อมโยงเส้นทางไปยัง libs C++/Additionnals includesที่จะคอมไพเลอร์

ถ้าดูใน(boost_root)/stage/libsไฟล์ libboost_system-vc110-mt-gd-1_51.libก็ไม่มี มันถูกเรียกlibboost_system-vc110-mt-sgd-1_51.libแทน

ความคิดใด ๆ ?


1
ฉันสามารถสร้างไฟล์ libboost_system-vc110-mt-gd-1_51.lib โดยสร้างบิวด์ที่สมบูรณ์ด้วย bjam แต่ฉันยังคงได้รับข้อผิดพลาด
Rushino

22
เปิดVS2012 developer command promptไปที่ไดเร็กทอรีรูทบูสต์ของคุณและพิมพ์bootstrapจากนั้นพิมพ์b2และคุณจะได้รับชุดไฟล์ไลบรารีที่สมบูรณ์
Jesse Good

คุณได้เพิ่มเส้นทางรวมและเส้นทางตัวเชื่อมไปยังโครงการของคุณหรือไม่
Jesse Good

1
คุณกำลังสร้างแอปพลิเคชันของคุณด้วย/MDหรือไม่?
Mahesh

หากสามารถดาวน์โหลดแทนการคอมไพล์ได้ให้ดาวน์โหลด libs จากที่นี่: code.ingres.com/boostlib/trunk/stage/lib
gorogm

คำตอบ:


93

c ++ →ทั่วไป→เพิ่มเติมรวมไดเรกทอรีพารามิเตอร์สำหรับไดเรกทอรีรายชื่อที่คอมไพเลอร์จะค้นหาไฟล์ส่วนหัว

คุณต้องบอกผู้เชื่อมโยงว่าจะค้นหาไลบรารีที่จะลิงก์ไปที่ใด ในการเข้าถึงการตั้งค่านี้คลิกขวาที่ชื่อโครงการในExplorer โซลูชันหน้าต่างแล้วคุณสมบัติ→ Linker →ทั่วไป→ไดเรกทอรีห้องสมุดเพิ่มเติม ป้อน<boost_path>\stage\libที่นี่ (นี่คือเส้นทางที่มีไลบรารีอยู่หากคุณสร้าง Boostโดยใช้ตัวเลือกเริ่มต้น)


คุณช่วยอธิบายหน่อยได้ไหมว่า boost_path คืออะไร
ggsmartboy

1
@ggsmartboy เป็นเส้นทางที่มีไฟล์แหล่งที่มาของการเพิ่มประสิทธิภาพ (เส้นทางเดียวกับที่คุณแสดงรายการในคอมไพเลอร์รวมถึงเส้นทางเพื่อให้สามารถค้นหาส่วนหัวของบูสต์ได้) คำตอบจะถือว่าคุณสร้างบูสต์ด้วยตัวเอง (ไม่ใช้การกระจาย) โดยใช้ตัวเลือกการสร้างเริ่มต้น
Praetorian

น่ากลัว ช่วยให้ฉันปวดหัวมากเกินไป ทำไมฉันถึงมองไม่เห็นสิ่งนี้ในเอกสารการเพิ่มพลัง (ถ้ายังมีอยู่) ฉันไม่รู้! :)
absentmindeduk

2
การตั้งค่าที่อ้างถึงในคำตอบนี้จะพบได้หากคุณคลิกขวาที่โปรเจ็กต์และเลือกคุณสมบัติ (สำหรับ noobs อย่างฉันคลิกขวาที่โซลูชันไปที่ Tools> Options เป็นต้นตัวเลือกเหล่านั้นไม่มีอยู่ในโปรเจ็กต์ทั้งหมดของฉัน) VS2013
Mr_and_Mrs_D

1
@Mr_and_Mrs_D คุณพูดถูกฉันคิดว่าผู้อ่านรู้ส่วนนั้น อัปเดตแล้ว
Praetorian

97

นี่เป็นวิธีที่ง่ายที่สุดสำหรับมือสมัครเล่นอย่างฉันที่เรียน C ++ ด้วยตัวเอง:

ก่อนอื่นให้คลายซิปไลบรารีเพิ่มไปยังไดเร็กทอรีที่คุณเลือก ฉันแนะนำc:\directory.

  1. เปิด Visual C ++ ของคุณ
  2. สร้างโครงการใหม่
  3. คลิกขวาที่โครงการ
  4. คลิกที่คุณสมบัติ
  5. คลิกที่ C / C ++
  6. คลิกทั่วไป
  7. เลือกรวมไลบรารีเพิ่มเติม
  8. รวมปลายทางของห้องสมุด เช่นc:\boost_1_57_0.
  9. คลิกที่ส่วนหัวก่อนคอมไพเลอร์
  10. คลิกที่สร้าง / ใช้ส่วนหัวที่คอมไพล์ไว้ล่วงหน้า
  11. เลือกไม่ใช้ส่วนหัวที่คอมไพล์ล่วงหน้า

จากนั้นไปที่ไลบรารีลิงก์หากคุณประสบปัญหา

  1. ไปที่ไฟล์ที่แตกคือc:\boost_1_57_0.
  2. คลิกที่booststrap.bat(อย่ากังวลที่จะพิมพ์บนหน้าต่างคำสั่งเพียงแค่รอและอย่าปิดหน้าต่างที่เป็นสถานที่ที่ฉันมีปัญหาซึ่งใช้เวลาแก้ไขสองสัปดาห์หลังจากนั้นไม่นานระบบbooststrapจะทำงานและสร้างไฟล์เดียวกัน แต่ตอนนี้มีสองชื่อที่แตกต่างกัน: b2และbjam.
  3. คลิกb2และรอให้ทำงาน
  4. คลิกbjamและรอให้ทำงาน จากนั้นจะมีการสร้างโฟลเดอร์stageขึ้นมา
  5. คลิกขวาที่โครงการ
  6. คลิกที่คุณสมบัติ
  7. คลิกที่ลิงค์เกอร์
  8. คลิกทั่วไป
  9. คลิกที่รวมไดเร็กทอรีไลบรารีเพิ่มเติม
  10. c:\boost_1_57_0\stage\libเลือกส่วนหนึ่งของเช่นห้องสมุด

และคุณพร้อมที่จะไป!


3
ขอบคุณมาก Wu Jie - ฉันไม่เคยทำอะไรแบบนี้มาก่อนและขั้นตอนเหล่านี้เป็นสิ่งที่ฉันต้องการในการสร้าง Boost และสร้างไฟล์ไลบรารี 'libboost_serialization-vc140-mt-gd-1_57.lib' ที่ขาดหายไปฉันประสบปัญหาในการเชื่อมโยง: )
Vixxd

6
ขอบคุณฉันชอบคำแนะนำโดยละเอียดที่ดี สำหรับขั้นตอน 2/3/4 ของการตั้งค่าการเพิ่มสิ่งที่ฉันทำก็คือแทนที่จะก) เปิด commandline พรอมต์เป็นราก ; b) เปลี่ยนเป็นไดเร็กทอรี boost_1_57_0; c) พิมพ์bootstrap.bat(ใช้เวลา 10-20 วินาที); d) พิมพ์./b2ตามคำแนะนำ (ใช้เวลา 30-40 นาทีจึงจะเสร็จสมบูรณ์)
Darren Cook

1
ฉันต้องเปิดbootstrap.batโดยใช้พรอมต์คำสั่ง Visual Studio เนื่องจากพรอมต์คำสั่งปกติไม่ทราบวิธีประมวลผลคำสั่ง 'cl'
jlaverde

2/20/2018 วิธีแก้ปัญหาของคุณใช้ได้ผลสำหรับฉัน (VS2017 + Boost 1.66) ขอบคุณมาก.
CaTx

ขอบคุณสำหรับขั้นตอนสำหรับผู้เริ่มต้น ขอให้ทุกคนตอบเหมือนที่เคยให้ไว้
Mudit Jain

6

ผมมีปัญหาเดียวกัน. มันเกิดจากฉันรวบรวม Boost ด้วย Visual C ++ 2010 (v100) และฉันพยายามใช้ไลบรารีกับ Visual Studio 2012 (v110) โดยไม่ได้ตั้งใจ

ดังนั้นผมเปลี่ยนการกำหนดค่า (ใน Visual Studio 2012) ไปคุณสมบัติโครงการ -> ทั่วไป -> plataform Toolsetและเปลี่ยนค่าจากVisual Studio 2012 (V110)เพื่อVisual Studio 2010 (V100)


7
ฉันหวังว่าคุณจะรู้ว่าเมื่อคุณเปลี่ยนชุดเครื่องมือแพลตฟอร์มเป็น v100 คุณกำลังบอก VS2012 IDE ให้ใช้คอมไพเลอร์ที่มาพร้อมกับ VS2010 ฟีเจอร์ C ++ 11 ใด ๆ ที่เพิ่มเข้ากับคอมไพเลอร์ VS2012 จะไม่สามารถใช้ได้ ทางออกที่ดีกว่าคือการรวบรวม Boost โดยใช้คอมไพเลอร์ VS2012 คุณสามารถมีไลบรารีที่สร้างขึ้นจากทั้ง 2010 และ 2012 อยู่ร่วมกันได้เนื่องจาก Boost ใส่หมายเลขเวอร์ชันของคอมไพเลอร์ลงในชื่อไฟล์เอาต์พุต
Praetorian

คุณพูดถูกและฉันก็รู้ ฉันกลัวว่าจะเกิดอะไรขึ้นถ้าฉันอัพเกรดไลบรารีและคอมไพเลอร์ ดังนั้นเมื่อโครงการเสร็จสิ้นฉันจะแก้ไขสิ่งนี้ทั้งหมด ขอบคุณ!
Jota Santos

6

อีกวิธีหนึ่ง:

ฉันนิ่งงันเพราะฉันรวม boost_regex-vc120-mt-gd-1_58.lib ในคุณสมบัติ Link-> Additional Dependencies แต่ลิงก์ยังคงบอกฉันว่าไม่สามารถเปิด libboost_regex-vc120-mt-gd-1_58.lib ( สังเกตคำนำหน้า lib) ฉันไม่ได้ระบุ libboost_regex-vc120-mt-gd-1_58.lib

ฉันพยายามใช้ (และสร้าง) บูสต์ไดนามิกไลบรารี (.dlls) แต่ไม่ได้กำหนดมาโคร BOOST_ALL_DYN_LINK เห็นได้ชัดว่ามีคำแนะนำในการคอมไพล์เพื่อรวมไลบรารีและหากไม่มี BOOST_ALL_DYN_LINK จะมองหาไลบรารีแบบคงที่ (พร้อมคำนำหน้า lib) ไม่ใช่ไดนามิกไลบรารี (ไม่มีคำนำหน้า lib)


ยังคงมีเพียง 1 upvote แต่ฉันพบว่าตัวเองอยู่ที่นี่ทุก ๆ สองสามเดือนได้รับการเตือนอีกครั้งว่าวิธีแก้ปัญหาของฉันคืออะไร !!
Neil Gatenby

3

ฉันมีปัญหาเดียวกันและความผิดพลาดของฉันคือฉันได้ติดตั้ง binary boost_1_55_0-msvc-11.0-32.exe เพื่อใช้กับ visual c ++ 2010 ซึ่งมีเวอร์ชัน v100 (คุณสมบัติโครงการ -> ConfiguratioProperties-> General-> platformTooset) ไม่ใช่ v110 เป็นภาพ c ++ 2012 ดังนั้นฉันจึงดาวน์โหลด boost_1_55_0-msvc-10.0-32.exe และตอนนี้ทุกอย่างก็โอเคแล้ว


2

ในกรณีที่คุณมีปัญหาในการเพิ่มการสร้างหรือไม่ต้องการที่จะทำอย่างนั้นอีกทางเลือกหนึ่งคือการดาวน์โหลดไฟล์ lib จากSourceForge ลิงก์นี้จะนำคุณไปยังโฟลเดอร์ของไฟล์ lib และ dll แบบซิปสำหรับเวอร์ชัน 1.51 แต่คุณควรจะแก้ไขลิงก์เพื่อระบุเวอร์ชันที่ต้องการได้ เห็นได้ชัดว่าตัวติดตั้งจาก BoostPro มีปัญหาบางอย่าง


2

ฉันมีปัญหาคล้ายกันเมื่อพยายามใช้การทดสอบหน่วยเพิ่มในVisual Studio 2015 (Community Edition):

ข้อผิดพลาดร้ายแรง LNK1104: libboost_unit_test_framework-vc140-mt-1_57

ฉันจึงคิดว่าจะแบ่งปันวิธีแก้ปัญหาของฉัน

คุณสามารถสร้างโครงการทดสอบหน่วยเพิ่มประสิทธิภาพได้ 2 วิธี (และวิธีนี้ใช้ได้กับทั้งสองอย่าง):

  1. โดยใช้Boost Unit Test Adapter
  2. หรือโดยการสร้างแอปพลิเคชันคอนโซล Win32 ( ขั้นตอนที่นี่ ) และแทนที่ฟังก์ชันหลักด้วยฟังก์ชันการทดสอบหน่วยเพิ่มประสิทธิภาพ ( ขั้นตอนที่นี่ )

นี่คือขั้นตอนที่ฉันทำตามเพื่อให้ทั้งสองโครงการใช้งานได้:

ขั้นแรกดาวน์โหลดเวอร์ชันบูสต์ที่ต้องการ (ตัวอย่างเช่นboost_1_57_0 ) คุณสามารถดาวน์โหลดบูสต์ด้วยไบนารีที่ถูกต้อง (คอมไพล์โดยใช้ msvc v140) หรือแยกไบนารีด้วยตัวคุณเองโดยเรียกใช้คำสั่งต่อไปนี้จากบรรทัดคำสั่ง:

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

โดยที่msvc-14.0ระบุว่าเราต้องการ Visual Studio 2015 เวอร์ชัน (VS 2015 = v14.0 = v140) และaddress-model = 32ระบุว่าเราต้องการแพลตฟอร์ม 32 (แต่สามารถทำได้เช่นเดียวกันสำหรับ 64 บิต)

เมื่อคุณมีไบนารีแล้วให้ไปที่ Visual Studio เลือกโครงการ Boost Unit Testing ที่คุณสร้างขึ้น ไปที่คุณสมบัติโครงการ> การกำหนดค่า (จากเมนูหลัก) และเลือกตัวเลือกต่อไปนี้:

  • ตั้งค่า " General> Platform Toolset " เป็น Visual Studio 2015 (v140)

  • รวมพา ธ ไปยังโฟลเดอร์ boost (เช่น C: \ boost_1_57_0) และพา ธ ไปยังโฟลเดอร์ย่อยที่มีไฟล์ไบนารี (เช่น C: \ boost_1_57_0 \ stage \ lib) ใน:

    • " C \ C ++> ไดเรกทอรีรวมเพิ่มเติม "
    • และ " Linker> ไดเรกทอรีห้องสมุดเพิ่มเติม "

1

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

คุณสมบัติ→ตัวเชื่อม→ทั่วไป→ไดเรกทอรีห้องสมุดเพิ่มเติม $ (BOOST) \ stage \ x64 \ lib


รายละเอียดเพิ่มเติมอีกเล็กน้อยว่าบรรทัดเหล่านั้นทำอะไรและทำไม -> จะช่วยปรับปรุงคุณภาพของคำตอบ
Anton Menshov

0

ฉันมีปัญหาเดียวกันรายงานที่นี่ ฉันแก้ไขปัญหาในการย้าย mainTest.cpp จากโฟลเดอร์ย่อย src / mainTest / ไปยังโฟลเดอร์หลัก src / ฉันเดาว่านี่เป็นปัญหาของคุณเช่นกัน


0

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

ในกรณีของฉัน bootstrap / bjam ไม่พร้อมใช้งาน (ไลบรารีถูกคอมไพล์ไว้ล่วงหน้าและผูกมัดกับ SCM) ในโครงการที่สืบทอดมาเก่า ไลบรารีไม่มีการกำหนดเวอร์ชัน VC หรือ BOOST ในชื่อไฟล์ของพวกเขาเช่น: libboost_regex-mt-sgd.libอย่างไรก็ตามProcessed /DEFAULTLIB:libboost_regex-vc120-mt-sgd-1_55.libจะถูกเรียกใช้โดยอัตโนมัติ

แก้ไขโดยการเพิ่มชื่อไฟล์ที่ไม่ใช่เวอร์ชันด้วยตนเองไปที่:

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

และขึ้นบัญชีดำ...vc120-mt-sgd-1_55.libใน

<IgnoreSpecificDefaultLibraries>libboost_regex-vc120-mt-sgd-1_55.lib</IgnoreSpecificDefaultLibraries>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.