我尝试使用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'
答案 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 "