glog/gflags:linux下用cmake通过MinGW-w64交叉编译生成windows版本静态库
2017-06-14 23:02
435 查看
ubuntu16下,先要安装mingw
sudo apt-get install mingw-w64
如果没有安装cmake,记得安装,
sudo apt-get install cmake
做交叉编译时要指定toolchain文件
Toolchain-mingw.cmake
build_gflags_mingw.sh
glog的过程也差不多
build_glog_mingw.sh
上面的脚本直接编译肯定通不过,会报错:找不到
这是个一般编译器都提供的系统头文件,在gcc下这个文件名是全小写(basetsd.h),因为linux下文件名都区分大小写,所以会报错,找到报错的位置 (
如果安装了wine (
wine xxxx.exe
sudo apt-get install mingw-w64
如果没有安装cmake,记得安装,
sudo apt-get install cmake
做交叉编译时要指定toolchain文件
Toolchain-mingw.cmake
# 设置交叉编译的目标操作为windows SET(CMAKE_SYSTEM_NAME Windows) # 指定c/c++编译器 SET(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc) SET(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++) SET(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres) # 指定编译目标操作系统版本时的搜索根路径 SET(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32 ) # adjust the default behaviour of the FIND_XXX() commands: # search headers and libraries in the target environment, search # programs in the host environment set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
build_gflags_mingw.sh
#!/bin/bash # 静态编译 gflags 源码脚本 # author guyadong@gdface.net # $gflags_source gflags源码位置 pushd $gflags_source #install_path 定义安装路径 # CMAKE_TOOLCHAIN_FILE 指定上面定义的toolchain文件的位置 # BUILD_SHARED_LIBS=off 不编译动态库 # BUILD_STATIC_LIBS=on 编译静态库 # BUILD_gflags_LIB 编译多线程库 # INSTALL_STATIC_LIBS=on 安装静态库 # INSTALL_SHARED_LIBS=off 不安装动态库 # REGISTER_INSTALL_PREFIX=off 不写注册表 # 以上定义的更详细的信息参见gflags源码 $gflags_source/CMakeLists.txt cmake . -DCMAKE_TOOLCHAIN_FILE=./Toolchain-mingw.cmake \ -DCMAKE_INSTALL_PREFIX=$install_path \ -DBUILD_SHARED_LIBS=off \ -DBUILD_STATIC_LIBS=on \ -DBUILD_gflags_LIB=on \ -DINSTALL_STATIC_LIBS=on \ -DINSTALL_SHARED_LIBS=off \ -DREGISTER_INSTALL_PREFIX=off make clean make -j 8 install popd
glog的过程也差不多
build_glog_mingw.sh
#!/bin/bash # cmake静态编译 glog 源码脚本 # author guyadong@gdface.net # 定义上面脚本编译的gflags的安装位置中CMake文件夹位置 gflags_DIR=$GFLAGS_INSTALL_PATH/CMake pushd $glog_root # CMAKE_EXE_LINKER_FLAGS指定静态连接所有库 # gflags_DIR=$gflags_DIR 指定依赖的gflags静态库位置 cmake . -DCMAKE_TOOLCHAIN_FILE=$BIN_ROOT/Toolchain-mingw.cmake \ -DCMAKE_INSTALL_PREFIX=$install_path \ -DCMAKE_EXE_LINKER_FLAGS="-static -static-libstdc++ -static-libgcc" \ -Dgflags_DIR=$gflags_DIR make clean make -j 8 install popd
上面的脚本直接编译肯定通不过,会报错:找不到
BaseTsd.h这个头文件,这算是glog代码的小bug,
BaseTsd.h是在msvc中的一个头文件。
这是个一般编译器都提供的系统头文件,在gcc下这个文件名是全小写(basetsd.h),因为linux下文件名都区分大小写,所以会报错,找到报错的位置 (
$glog_root/src/logging.cc),将
BaseTsd.h改为
basetsd.h就可以了。
如果安装了wine (
sudo apt-get install wine),编译通过后可以直接在linux下运行一下生成的exe文件
wine xxxx.exe
相关文章推荐
- CMake 生成 Linux 下 Debug 版本的 Makefile 方法
- windows cmake mingw生成
- opencv+ linux + cmake 生成 opencv静态库
- Windows下通过xmanager远程桌面控制Linux
- Windows下通过xmanager远程桌面控制Linux
- Windows下通过xmanager远程桌面控制Linux
- [WSE]Web Service与Windows Service通过WSE2.0建立订阅/发布关系[更新版本]
- Linux与Windows通过NFS文件同步
- vmware下linux通过host-only方式与windows共享网络
- linux(Radhat9.0)通过smb服务共享windows文件
- Linux与Windows 通过samba互访共享资源
- windows下通过xmanager来远程桌面控制Linux
- 通过windows引导Linux
- 贴近windows的字体效果。fedora ubuntu等linux全系列版本适用
- Windows下通过xmanager远程桌面控制Linux
- 通过文件结构直接生成xls文件的VB.Net和Java两个版本
- Windows下通过xmanager远程桌面控制Linux
- 在windows操作系统下通过xmanager图形化远程运行linux
- Windows下通过xmanager远程桌面控制Linux(转)
- C#编程生成的Word2007版本的文件如何兼容Word2003?(通过代码将docx文件转存为doc文件)