MSYS2 编译 sigrok

MSYS2 编译 sigrok

公司买了个HANTEK虚拟示波器,使用起来感觉不是很顺,一是在我的WIN7的电脑上一装驱动就蓝屏死机,二是示波器软件看波形等操作很不顺手。于是想找个开源的示波器软件用用。网上有个SIGROK,可以支持多种示波器,逻辑分析仪。但我手上的这款不支持。心想或许改改设备驱动重新编译一下可以用。选择的是用MSYS2编译,一尝试,可真不是那么简单,一大堆问题,几次几乎要放弃,抱着就当学习锻炼的态度,终于编译成功。现记录如下:

1.MSYS2编译环境安装

参考 http://www.sigrok.org/wiki/Windows
1. 下载安装msys2-x86_64-20161025.exe
2. 运行MSYS2 MinGW32 更新及安装编译环境

   $ pacman -Syu

Now close the shell and start an “MSYS2 MinGW32” shell (do NOT use the
“MSYS2 Shell”, and do NOT use the “MSYS2 MinGW64” shell). All other
steps will always have to be performed in an “MSYS2 MinGW32” shell.

Install the MSYS2 git package there:

   $ pacman -Sy   

 $ pacman -S git

git 下载安装完成后,接下来建个目录比如 f:\sigrok,然后进入该目录, git 克隆 sigrok-util(其实只需要sigrok-native-msys2脚本)

$ cd /f/sigrok

$ git clone git://sigrok.org/sigrok-util

$ cd /f/sigrok/sigrok-util/cross-compile/msys2/

接下来安装编译环境,安装需要6G多的空间,真大啊,可能有些是不需要的,为了能顺利编译,不管那么多了。但还是要些小技巧,不然可能一两天都没法下载安装好。我基本上整整用了一下午安装好编译环境。
技巧:修改MSYS2源,测试了网上提供的几个源,基本上能用的只有
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/$arch
Server = http://repo.msys2.org/msys/$arch
这两个源,清华的这个源虽然有些文件没有但速度极快,可以达到3M/S.
网上资料修改源一般是修改三个文件:
\msys64\etc\pacman.d\mirrorlist.mingw32
\msys64\etc\pacman.d\mirrorlist.mingw64
\msys64\etc\pacman.d\mirrorlist.msys
其实只修改\msys64\etc\pacman.d\mirrorlist.msys就行。
先只打开清华的源:

##
## MSYS2 repository mirrorlist
##

## Primary
## msys2.org
##Server = http://mirrors.ustc.edu.cn/msys2/REPOS/MSYS2/$arch
##Server = http://mirrors3.ustc.edu.cn/msys2/REPOS/MSYS2/$arch
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/$arch
## Server = http://repo.msys2.org/msys/$arch
##Server = http://downloads.sourceforge.net/project/msys2/REPOS/MSYS2/$arch
##Server = http://www2.futureware.at/~nickoe/msys2-mirror/msys/$arch/

运行

$ ./sigrok-native-msys2 prepare

这样虽然不能一次安装好,但可以下载大多数包。如果偶尔有超时下载失败,可以再次运行上面的脚本,再试一次。然后再单独打开源
Server = http://repo.msys2.org/msys/$arch
再运行
$ ./sigrok-native-msys2 prepare

下载sigrok 源码并编译。

$ ./sigrok-native-msys2

前几个库都下载安装正常。但后面有因下载失败而退出的情况,这时如果重新执行上面的脚本,会删除已下载编译好的模块,重新来过,
这时可以修改脚本sigrok-native-msys2,注释掉已完成的操作,只执行后面的下载和编译。


# Remove build directory contents (if any) and create a new build dir.
#rm -rf “$BUILDDIR”

#mkdir $BUILDDIR

cd $BUILDDIR
cd pulseview
# mkdir build cd build

编译到了最后的难点:pulseview编译失败
– Checking for modules ‘Qt5Widgets;Qt5Gui;Qt5Svg’
– No package ‘Qt5Widgets’ found
– No package ‘Qt5Gui’ found
– No package ‘Qt5Svg’ found
CMake Error at F:/msys64/mingw32/share/cmake-3.8/Modules /FindPkgConfig.cmake:421 (message):
A required package was not found

修改sigrok-native-msys2
P=”$PREFIX/lib/pkgconfig”
改为:
P=”$PREFIX/lib/pkgconfig:/mingw32/qt5-static/lib/pkgconfig”

编译可以正常了,链接失败了:
F:/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/6.3.0/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lpython3.5m
F:/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/6.3.0/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -lQt5PlatformSupport
F:/msys64/mingw32/bin/../lib/gcc/i686-w64-mingw32/6.3.0/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -ljasper
collect2.exe: error: ld returned 1 exit status

搜索\msys64\mingw32\lib根本没有libjasper.a libQt5PlatformSupport.a libpytho3.5m.a 只有一个libpytho3.5m.dll.a
尝试:1.将libpytho3.5m.dll.a 改名 libpytho3.5m.a
2.屏蔽 cmake
#PKG_CONFIG_PATH= P SB cmake -G “Unix Makefiles” -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX -DDISABLE_WERROR=y -DENABLE_TESTS=n ..
3.修改linklibs.rsp 删除 -ljasper -lQt5PlatformSupport

链接还是有问题:
F:/msys64/home/tanyongch/sr_msys2/lib\libsigrok.a(backend.o) In function sr_buildinfo_libs_get':
F:\sigrok\sigrok-util\cross-compile\msys2\build\libsigrok\build/../src/backend.c:133: undefined reference to
_imp__glib_interface_age’

F:\sigrok\sigrok-util\cross-compile\msys2\build\libsigrok\build/../src/session_file.c:125: undefined reference to _imp__zip_open'
...
F:\sigrok\sigrok-util\cross-compile\msys2\build\libsigrokdecode\build/../version.c:154: undefined reference to
_imp__glib_interface_age’
应该是libsigrok.a 按动态库编译,现在pulseview链接的是静态库。
尝试将F:\msys64\mingw32\lib libglib-2.0.dll.a libzip.dll.a 暂时改名为: libglib-2.0.a libzip.a
哈哈,终于编译成功.
在\sr_msys2\bin 目录下生成了 pulseview.exe,双击运行,提示丢失DLL文件,将pulseview.exe拷贝到F:\msys64\mingw32\bin ,再双击运行,ok!!! 或许应该尝试一下全部静态库编译,不需要一堆DLL文件。
MSYS2 编译 sigrok_第1张图片

你可能感兴趣的:(Windows,msys2编译,sigrok)