mingw编译问题小计

简介: 今天终于把端午写的代码在windows上(mingw)编译过了。过程还是比较艰辛的,这里记录下(之前boost库的编译,可以参考前面的博客): 1、cmake查找系统上的boost库,之前直接失败,原因是FindBoost这个文件只支持到最高1.46.0版本,自己编译安装的boost版本是1.46

今天终于把端午写的代码在windows上(mingw)编译过了。过程还是比较艰辛的,这里记录下(之前boost库的编译,可以参考前面的博客):

1、cmake查找系统上的boost库,之前直接失败,原因是FindBoost这个文件只支持到最高1.46.0版本,自己编译安装的boost版本是1.46.1。修改了这个文件支持的boost版本之后,能够找到目录了,但是boost thread和boost system都没法找到。解决方法是在cmake文件中添加:
if(WIN32)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_NO_SYSTEM_PATHS ON)
set(Boost_USE_STATIC_RUNTIME ON)
endif(WIN32)
之后,让boost去强制寻找静态库(之前编译boost只编译了静态库)
2、boost asio库在windows中链接的时候,需要指定链接win32 socket相关的库。mingw没有vs这样能够根据静态链接库自动去链接它依赖的库,所以在最终链接成可执行程序的时候,会报undefined reference。解决方法在cmake中添加:
if(WIN32)
find_library(MSwsock mswsock)
target_link_libraries(http_static MSwsock)
target_link_libraries(http MSwsock)
find_library(WS2_32 ws2_32)
target_link_libraries(http_static WS2_32)
target_link_libraries(http WS2_32)
ADD_DEFINITIONS(-DBOOST_THREAD_USE_LIB)
endif(WIN32)
这样当编译环境在windows中时,会自动链接mswsock和ws2_32两个库。
3、boost thread库的静态链接。boost thread库在最后链接的时候,也会报有些符号找不到,差了半天原因,是因为boost在试图链接thread库的动态链接库。因为不想让这个程序在其他windows机器上跑要复制dll,解决方法前面已经有了,就是添加ADD_DEFINITIONS(-DBOOST_THREAD_USE_LIB)这个宏定义,强制boost寻找静态链接库。
4、静态链接mingw的gcc和stdc++库。之前编译完的程序,放到其他机器上还是会报有libgcc相关的动态链接库找不到,因为mingw默认是将内置的gcc和c++库做动态链接的。要修改这个,需要在编译的时候给编译器传递-static-libgcc -static-libstdc++这两个参数,在cmake中可以这样修改CMakeLists.txt文件:
if(WIN32)
set(CMAKE_CXX_FLAGS “-static-libgcc -static-libstdc++”)
endif(WIN32)

转载自:https://coolex.info/blog/169.html
目录
相关文章
|
6月前
|
Shell C++ Windows
[√]尝试使用cmake编译使用vld
[√]尝试使用cmake编译使用vld
47 0
|
9月前
|
编译器 C语言 Windows
Qt 使用MinGW编译器调用MinGW编译生成的dll
Qt 使用MinGW编译器调用MinGW编译生成的dll
133 0
|
Linux C++ Windows
MSVC编译动态库
MSVC编译动态库
168 0
|
编译器 Linux C语言
MinGW编译动态库
MinGW编译动态库
414 0
|
Linux
MSVC编译多个C程序文件
MSVC编译多个C程序文件
118 0
|
XML 并行计算 Linux
MSVC编译静态库
MSVC编译静态库
268 0
|
编译器 Linux vr&ar
MinGW编译静态库
MinGW编译静态库
311 0
关于 Qt使用MSVC版本编译出现“QMAKE_MSC_VER” 的解决方法
关于 Qt使用MSVC版本编译出现“QMAKE_MSC_VER” 的解决方法
关于 Qt使用MSVC版本编译出现“QMAKE_MSC_VER” 的解决方法
|
编译器 C语言 Windows
【C 语言】Windows 下使用 gcc 编译器 ( 常用的编译器 | Qt 中的 gcc 编译器 | 独立安装 MinGW )(二)
【C 语言】Windows 下使用 gcc 编译器 ( 常用的编译器 | Qt 中的 gcc 编译器 | 独立安装 MinGW )(二)
119 0
【C 语言】Windows 下使用 gcc 编译器 ( 常用的编译器 | Qt 中的 gcc 编译器 | 独立安装 MinGW )(二)
|
编译器 Linux C语言
【C 语言】Windows 下使用 gcc 编译器 ( 常用的编译器 | Qt 中的 gcc 编译器 | 独立安装 MinGW )(一)
【C 语言】Windows 下使用 gcc 编译器 ( 常用的编译器 | Qt 中的 gcc 编译器 | 独立安装 MinGW )(一)
353 0
【C 语言】Windows 下使用 gcc 编译器 ( 常用的编译器 | Qt 中的 gcc 编译器 | 独立安装 MinGW )(一)