mingw g ++无法链接到库

时间:2015-06-25 15:39:31

标签: c++ windows mingw cross-platform

我尝试使用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软件包,其中包括预编译的boost库,可以进行链接。但是,似乎命名约定有点不同,例如-lboost_system变为-llibboost_system-mt(不完全确定-mt后缀需要什么)。

问题是我无法找到-lrt的mingw对应物。我已经尝试了-lrtm-lrtutils,但在这两种情况下我都得到了:

[...] 
undefined reference to `__imp_getsockopt'

2 个答案:

答案 0 :(得分:1)

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

如果not请提供-L标记,表明您图书馆的位置。

例如:

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

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

答案 1 :(得分:0)

Windows上没有rt库。

您遗失-lws2_32

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