mingw g++无法与库链接

mingw g++ is unable to link with libraries

本文关键字:链接 g++ mingw      更新时间:2023-10-16

我正试图使用X86_64-w64-mingw32-g++(封装在Archlinux的MingW包中)将一些C++代码交叉编译到Windows可执行文件中,但我遇到了一些问题。

我打电话给

x86_64-w64-mingw32-g++ -o build_win/asm build_win/asm.o build_win/asm_lib.o build_win/socket_boost.o -I../extra/etc -fopenmp -lrt -std=c++11 -g -lboost_system -lboost_serialization 

来自makefile,但我被抛出了错误:

/usr/lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld: cannot find -lrt
/usr/lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld: cannot find -lboost_system
/usr/lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld: cannot find -lboost_serialization

这对原生g++来说很好,所以我到底需要更改mingw才能编译吗?

编辑:我安装了mingw-w64-boost包,其中包括预编译并准备链接的提升库。然而,命名约定似乎有点不同,例如-lboost_system变成了-llibboost_system-mt(不完全确定-mt后缀的含义)。

问题是我找不到-lrt的mingw对应项。我尝试过-lrtm-lrtutils,但在这两种情况下我都得到了

[...] 
undefined reference to `__imp_getsockopt'

您确定-lboost_system和其他库与makefile位于同一目录中吗?

如果是not,那么请包含-L标志,该标志表示您的库的位置。

例如:

-L /path_openmp -fopenmp -L /path_boost_system/ -lboost_system -L /path_serialization -lboost_serialization

此外,从.o文件创建可执行文件时,不需要包含-I-g标志。当您从.cpp文件创建.o时,这些是必需的。

Windows上没有rt库。

您缺少-lws2_32

$ x86_64-w64-mingw32-nm -A  /usr/x86_64-w64-mingw32/lib/*.a 2>/dev/null | grep getsockopt | grep " T "