\ mingw-w64 \ ... \ ld.exe: не удается найти -lboost_filesystem - PullRequest
2 голосов
/ 13 июня 2019

Я пытаюсь скомпилировать простую программу на c ++ с mingw в командной строке "windows 7 64bit".Я получаю сообщение об ошибке:

>gcc fs.cpp -lboost_filesystem -lboost_system
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lboost_filesystem
c:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lboost_system
collect2.exe: error: ld returned 1 exit status

Может быть полезна информация о системных переменных:

c:\Boost\lib>echo %path%
C:\Boost\boost-build\bin;C:\ProgramData\Oracle\Java\javapath;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files (x86)\Skype\Phone\;c:\Program Files\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin\;c:\Boost\lib\

c:\Boost\lib>echo %library_path%
c:\Boost\lib

c:\Boost\lib>echo %cplus_include_path%
c:\Boost\include\

, а содержимое boost / lib:

c:\Boost\lib>dir
 Volume in drive C is Acer
 Volume Serial Number is 62C5-4B7E

 Directory of c:\Boost\lib

13.06.2019.  00:31    <DIR>          .
13.06.2019.  00:31    <DIR>          ..
13.06.2019.  00:28         5.608.426 libboost_filesystem-mgw81-mt-d-x32-1_70
13.06.2019.  00:28         6.553.512 libboost_filesystem-mgw81-mt-d-x64-1_70
13.06.2019.  00:28         3.713.979 libboost_filesystem-mgw81-mt-d-x64-1_70
13.06.2019.  00:28            92.342 libboost_filesystem-mgw81-mt-d-x64-1_70
13.06.2019.  00:28           344.104 libboost_filesystem-mgw81-mt-s-x32-1_70
13.06.2019.  00:28           405.348 libboost_filesystem-mgw81-mt-s-x64-1_70
13.06.2019.  00:28         5.608.426 libboost_filesystem-mgw81-mt-sd-x32-1_7
13.06.2019.  00:28         6.553.512 libboost_filesystem-mgw81-mt-sd-x64-1_7
13.06.2019.  00:28           344.104 libboost_filesystem-mgw81-mt-x32-1_70.a
13.06.2019.  00:28           405.348 libboost_filesystem-mgw81-mt-x64-1_70.a
13.06.2019.  00:28           239.395 libboost_filesystem-mgw81-mt-x64-1_70.d
13.06.2019.  00:28            92.132 libboost_filesystem-mgw81-mt-x64-1_70.d
13.06.2019.  00:28             2.822 libboost_system-mgw81-mt-d-x32-1_70.a
13.06.2019.  00:28             3.118 libboost_system-mgw81-mt-d-x64-1_70.a
13.06.2019.  00:28            49.550 libboost_system-mgw81-mt-d-x64-1_70.dll
13.06.2019.  00:28             1.772 libboost_system-mgw81-mt-d-x64-1_70.dll
13.06.2019.  00:28               730 libboost_system-mgw81-mt-s-x32-1_70.a
13.06.2019.  00:28               924 libboost_system-mgw81-mt-s-x64-1_70.a
13.06.2019.  00:28             2.822 libboost_system-mgw81-mt-sd-x32-1_70.a
13.06.2019.  00:28             3.118 libboost_system-mgw81-mt-sd-x64-1_70.a
13.06.2019.  00:28               730 libboost_system-mgw81-mt-x32-1_70.a
13.06.2019.  00:28               924 libboost_system-mgw81-mt-x64-1_70.a
13.06.2019.  00:28            47.834 libboost_system-mgw81-mt-x64-1_70.dll
13.06.2019.  00:28             1.760 libboost_system-mgw81-mt-x64-1_70.dll.a

.попытался включить путь вручную с помощью

gcc fs.cpp -o fs.exe -Lc:\Boost\lib -lboost_filesystem -lboost_system

или с помощью

gcc fs.cpp -o fs.exe -L c:\Boost\lib -lboost_filesystem -lboost_system

или с помощью

gcc fs.cpp -o fs.exe -L c:\Boost\lib -llibboost_filesystem -llibboost_system

и получил тот же вывод.

Мнеэто похоже на проблему компоновщика.Но я не опытный.Может ли это быть результатом плохо скомпилированных библиотечных файлов?

Какие опции я должен использовать при компиляции c ++ в Windows?Где я ошибся?

1 Ответ

0 голосов
/ 13 июня 2019

Я полагаю, что ваша проблема вызвана сложной схемой именования boost библиотечных файлов,
см. Boost Начало работы в Windows: именование библиотеки .

Короче говоря,boost добавляет символы к именам файлов библиотеки, чтобы указать (среди прочего):

  • версия компилятора: -mgw81,
  • многопоточность: -mt,
  • архитектура машины и модель адреса: -x64
  • и расширенная версия: -1_70.

Следовательно, boost_filesystem становится: boost_filesystem-mgw81-mt-x64-1_70 и boost_system становится: boost_system-mgw81-mt-x64-1_70, поэтому попробуйте:

gcc fs.cpp -o fs.exe -Lc:\Boost\lib -lboost_filesystem-mgw81-mt-x64-1_70 -lboost_system-mgw81-mt-x64-1_70

Примечание: системы сборки типа cmake упрощают эти проблемы, но могут создавать новые, см. cmake FindBoost не находит Boostбиблиотеки при сборке с MinGW в Windows .

...