c++ - mingw g++ 无法与库链接

标签 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'

最佳答案

您确定 -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/

相关文章:

c++ - 当前版本的 mingw64 是否与 SDL 库不兼容?以前没有的编译器错误

c++ - 创建可部署的 CMake 动态 SDL2 应用程序

c - 套接字失败后重写

c++ - QtCreator : process jom. exe 退出,代码为 3

c++ - 隐藏/显示所有窗口并恢复 Z 顺序

php - 如何使用 Saxon/C 从 PHP 执行 XQuery?

c++ - 使用 MinGW 配置 Eclipse 3.7?

c++ - 如何阻止 `/Gm-` 从 CMake 传递给 clang_cl.exe

c++ - 确定比较中文字的有效类型

c++ - unsigned int 导致无限循环