我正在尝试使用 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'
最佳答案
您确定 -lboost_system
和其他库与 makefile 位于同一目录中吗?
如果不是
,那么请包含-L
标志,它指示您的库的位置。
例如:
-L /path_openmp -fopenmp -L /path_boost_system/ -lboost_system -L /path_serialization -lboost_serialization
此外,在从 .o
文件创建可执行文件时,您不需要包含 -I
和 -g
标志。从 .cpp
文件创建 .o
时需要这些。
关于c++ - mingw g++ 无法与库链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31054864/