问题
I'm trying to compile simple c++ program with mingw on "windows 7 64bit" command prompt. Error I get is:
>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
Maybe useful system variable information:
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\
and a content of boost/lib is:
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
I've tried to include path manually with
gcc fs.cpp -o fs.exe -Lc:\Boost\lib -lboost_filesystem -lboost_system
or with
gcc fs.cpp -o fs.exe -L c:\Boost\lib -lboost_filesystem -lboost_system
or with
gcc fs.cpp -o fs.exe -L c:\Boost\lib -llibboost_filesystem -llibboost_system
and gotthe same output.
To me it looks like a linker problem. But, I'm not experienced. Could this be a product of badly compiled library files?
What options should I use when compiling c++ on Windows? Where did I go wrong?
回答1:
I believe that your issue is caused by the complicated naming scheme of boost
library files,
see Boost Getting Started on Windows: library naming.
In short, boost
appends characters to library file names to specify (amongst other things):
- compiler version:
-mgw81
, - multi-threading:
-mt
, - machine architecture and address model:
-x64
- and boost version:
-1_70
.
Therefore, boost_filesystem
becomes: boost_filesystem-mgw81-mt-x64-1_70
and boost_system
becomes: boost_system-mgw81-mt-x64-1_70
, so try:
gcc fs.cpp -o fs.exe -Lc:\Boost\lib -lboost_filesystem-mgw81-mt-x64-1_70 -lboost_system-mgw81-mt-x64-1_70
Note: build systems like cmake simplify these issues, but they can introduce new ones, see: cmake FindBoost not finding Boost libraries when building with MinGW on Windows.
来源:https://stackoverflow.com/questions/56571745/mingw-w64-ld-exe-cannot-find-lboost-filesystem