mingw g++无法与库链接
mingw g++ is unable to link with libraries
我正试图使用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 "
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- CMake-按正确顺序将项目与C运行时对象文件链接
- 从链接列表c++中删除一个项目
- 有根的二进制搜索树.保留与其父级的链接
- 读取文件的最后一行并输入到链接列表时出错
- 静态数据成员的问题-修复链接错误会导致编译器错误
- node-gyp 在 macOS 上未正确链接库
- 基于boost的程序的静态链接——zlib问题
- 无法链接 CMake 中的本地库
- 内联函数中具有内部链接的全局变量
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 使用gcc从静态链接的文件中查找可选符号
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 下面是我为检测链接列表中的循环而制作的代码
- 有了gcc,是否可以链接库,但前提是它存在
- 使用C链接在函数内部创建C++模板
- Visual Studio mkl_link_tool.exe链接错误
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- 有人能帮我处理这个链接列表吗?C++