我正在尝试在"Windows 7 64bit"命令提示符下使用mingw编译简单的c ++程序。我得到的错误是:
>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:Boostlib>echo %path%
C:Boostboost-buildbin;C:ProgramDataOracleJavajavapath;C:Program FilesCommon FilesMicrosoft SharedWindows Live;C:Program Files (x86)Common FilesMicrosoft SharedWindows Live;C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:WindowsSystem32WindowsPowerShellv1.0;C:Program Files (x86)Windows LiveShared;C:Program Files (x86)SkypePhone;c:Program Filesmingw-w64x86_64-8.1.0-win32-seh-rt_v6-rev0mingw64bin;c:Boostlib
c:Boostlib>echo %library_path%
c:Boostlib
c:Boostlib>echo %cplus_include_path%
c:Boostinclude
而 boost/lib 的内容是:
c:Boostlib>dir
Volume in drive C is Acer
Volume Serial Number is 62C5-4B7E
Directory of c:Boostlib
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:Boostlib -lboost_filesystem -lboost_system
或与
gcc fs.cpp -o fs.exe -L c:Boostlib -lboost_filesystem -lboost_system
或与
gcc fs.cpp -o fs.exe -L c:Boostlib -llibboost_filesystem -llibboost_system
并获得相同的输出。
对我来说,这看起来像是一个链接器问题。但是,我没有经验。这可能是库文件编译不良的产物吗?
在 Windows 上编译 c++ 时应该使用哪些选项?我哪里做错了?
您的问题是由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:Boostlib -lboost_filesystem-mgw81-mt-x64-1_70 -lboost_system-mgw81-mt-x64-1_70
注意:像cmake这样的构建系统简化了这些问题,但它们可以引入新的问题,请参阅:在Windows上使用MinGW构建时,cmake FindBoost找不到Boost库。