12230|21

1560

帖子

24

TA的资源

五彩晶圆(初级)

楼主
 

BB Black 入门基础之OpenCV的交叉编译 [复制链接]

本帖最后由 lonerzf 于 2014-11-23 15:16 编辑

经过几天的不断尝试,终于顺利完成了OpenCV的交叉编译。哎,本来这就是一编译过程,硬是用了一周的时间。
现在把我的实现步骤贴出来,希望大家能少走弯路。
参考文献:
docs.opencv.org/doc/tutorials/introduction/crosscompilation/arm_crosscompile_with_cmake.html
blog.csdn.net/msq19895070/article/details/24477575
m.blog.csdn.net/blog/guo8113/17794395
blog.csdn.net/shuxiao9058/article/details/7525376[/quote]
虚拟机环境: Ubuntu 12.04 LTS
编译器: arm-linux-gnueabihf-
BBB系统: Ubuntu 12.04 armhf
OpenCV: 2.4.3
Cmake: 2.8.7
OpenCV交叉编译时用到的几个依赖库:https://download.eeworld.com.cn/detail/lonerzf/538159

已编译的BB Black的OpenCV库:
https://download.eeworld.com.cn/detail/lonerzf/538163


一、安装依赖项
  1. sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev
复制代码
这几项与视频解码相关,不放心的话,可以先不装,之后再装也一样。只不过不装这几项呢,make配置的结果会出现:
FFMPEG:                   NO
codec:                      NO
format:                     NO
util:                           NO
swscale:                    NO


结果就这么直观。。。

二、Cmake的安装
  1. sudo apt-get install cmake cmake-qt-gui
复制代码
装好之后目前版本是2.8.7的。当然,也可以从官网下载源码make。只是,别装2.8.12这个最新版,个别地方会报错。


三、相关库编译安装
OpenCV交叉编译时各个库之间依赖关系如下:

OpenCV
        |--------zlib               
        |--------jpeg
        |--------libpng
                    |--------zlib
        |--------tiff
                    |--------zlib
        |--------ffmpeg
                    |--------x264
                    |--------xvidcore


考虑到个别库不太容易找到,这几个库的源码已经打包上传,可以在论坛的下载中心下载。
内容如下:



为了简化操作,咱们这里用脚本的方式操作。
首先解压OpenCV到指定目录。我这里是:
/opt/lon/OpenCV-2.4.3/

添加环境变量


export COMPILE_PREFIX=arm-linux-gnueabihf-
export INSTALL_PREFIX=`pwd`/crosscompile_root
export DL_FOLDER=`pwd`/dl
export BUILD_FOLDER=`pwd`/buildpool
export CC=${COMPILE_PREFIX}gcc
[/quote]
然后新建crosscompile_root dl build buildpool 四个文件夹。如下图所示:


接着将下载好的各压缩文件都复制到dl文件夹下。
同时新建一个mycfg.sh的脚本文件,并为其添加可执行权限
  1. sudo chmod a+x  mycfg.sh
复制代码



接着就是打开mycfg.sh并写入以下内容(论坛的代码功能不太好,就直接以文本形式粘过来了):


#!/bin/bash
echo "Hello, zlib!"
pushd $BUILD_FOLDER
unzip $DL_FOLDER/zlib127.zip
pushd zlib-1.2.7
./configure --prefix=$INSTALL_PREFIX
make
make install
popd
echo "zlib end"

echo "Hello, jpeg!"
tar xf $DL_FOLDER/jpegsrc.v8d.tar.gz
pushd jpeg-8d
./configure --host=arm-linux-gnueabihf --prefix=$INSTALL_PREFIX
mkdir -p $INSTALL_PREFIX/bin
mkdir -p $INSTALL_PREFIX/man/man1
make
make install
popd
echo "jpeg end"

echo "Hello, png!"
tar xf $DL_FOLDER/libpng-1.5.14.tar.gz
pushd libpng-1.5.14
./configure --host=arm-linux-gnueabihf --prefix=$INSTALL_PREFIX CPPFLAGS=-I$INSTALL_PREFIX/include LDFLAGS=-L$INSTALL_PREFIX/lib
make
make install
popd
echo "png end"

echo "Hello, x264!"
tar xjf $DL_FOLDER/x264-snapshot-20120528-2245-stable.tar.bz2
pushd x264-snapshot-20120528-2245-stable
./configure --host=arm-linux --cross-prefix=arm-linux-gnueabihf- --enable-shared --prefix=$INSTALL_PREFIX
make
make install
popd
echo "x264 end"

echo "Hello, xvidcore!"
tar xf $DL_FOLDER/xvidcore-1.3.2.tar.gz
pushd xvidcore/build/generic
./configure --prefix=$INSTALL_PREFIX --host=arm-linux-gnueabihf  --disable-assembly
make
make install
popd
echo "xvidcore end"

echo "Hello, tiff!"
tar xf $DL_FOLDER/tiff-4.0.3.tar.gz
pushd tiff-4.0.3
./configure --prefix=$INSTALL_PREFIX --host=arm-linux-gnueabihf --enable-shared CPPFLAGS=-I$INSTALL_PREFIX/include LDFLAGS=-L$INSTALL_PREFIX/lib
make
make install
popd
echo "tiff end"

echo "Hello, ffmpeg!"
tar -xjvf $DL_FOLDER/ffmpeg-0.10.3.tar.bz2
pushd ffmpeg-0.10.3
./configure --prefix=$INSTALL_PREFIX --enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=arm --cpu=armv7-a --disable-stripping --target-os=linux --enable-libx264 --enable-libxvid --cc=arm-linux-gnueabihf-gcc --enable-swscale --extra-cflags=-I$INSTALL_PREFIX/include --extra-ldflags=-L$INSTALL_PREFIX/lib --disable-asm
make
make install
popd
echo "ffmpeg end"[/quote]
完了以后呢,不用多想,执行脚本吧。
  1. ./mycfg.sh
复制代码
用了脚本之后这个过程也算半自动了吧,可以喝茶去了~

上一步完成了之后呢,进入上文新建的build文件夹, 创建一个toolchain.cmake的文件,并填入如下内容:

set( CMAKE_SYSTEM_NAME Linux )
set( CMAKE_SYSTEM_PROCESSOR arm )
set( CMAKE_C_COMPILER arm-linux-gnueabihf-gcc )
set( CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++ )
###########user defined#############
set( CMAKE_FIND_ROOT_PATH "/opt/lon/OpenCV-2.4.3/crosscompile_root" )
set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
######################################[/quote]
好,cmake吧。
  1. cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake ../
复制代码
然后再运行如下指令
  1. cmake-gui
复制代码
减少一些没有用的项,如gtk、cude、1394等。其中CUDE,当时就困扰了我好一会儿呢。看人家怎么解释的:
[quote]"CUDA_TOOLKIT_ROOT_DIR not found or specified", CUDA is a parallel computing platform and programming model that enables dramatic increases in computing performance by harnessing the power of the graphics processing unit (GPU). It is only developed for NVdia GPU. However, it seems that not all PC will be equipped with that kind of GPU, theoretically, it is not necessary to install it and we make the option WITH_CUDA OFF. Also the opencv only support CUDA 4.0 now from the post bellow.

确认之后Config 并 General生成配置信息。
下面附上我的cmake配置信息:
[quote]Detected version of GNU GCC: 113 (113)
checking for module 'gstreamer-base-0.10'
  package 'gstreamer-base-0.10' not found
checking for module 'libv4l1'
  package 'libv4l1' not found
Looking for linux/videodev.h
Looking for linux/videodev.h - not found
Looking for linux/videodev2.h
Looking for linux/videodev2.h - found
Looking for libavformat/avformat.h
Looking for libavformat/avformat.h - not found
Looking for ffmpeg/avformat.h
Looking for ffmpeg/avformat.h - not found
Could NOT find PythonLibs (missing:  PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS) (Required is at least version "2.7.3")

General configuration for OpenCV 2.4.3 =====================================

  Platform:
    Host:                        Linux 3.2.0-61-generic-pae i686
    Target:                      Linux arm
    CMake:                       2.8.7
    CMake generator:             Unix Makefiles
    CMake build tool:            /usr/bin/make
    Configuration:               Release

  C/C++:
    Built as dynamic libs?:      YES
    C++ Compiler:                /opt/lon/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/arm-linux-gnueabihf-g++  (ver 1.13.1)
    C++ flags (Release):         -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wno-narrowing -Wno-delete-non-virtual-dtor -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -O3 -DNDEBUG  -DNDEBUG
    C++ flags (Debug):           -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wno-narrowing -Wno-delete-non-virtual-dtor -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -g  -O0 -DDEBUG -D_DEBUG -ggdb3
    C Compiler:                  /opt/lon/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/arm-linux-gnueabihf-gcc
    C flags (Release):           -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wno-narrowing -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -O3 -DNDEBUG  -DNDEBUG
    C flags (Debug):             -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wno-narrowing -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -g  -O0 -DDEBUG -D_DEBUG -ggdb3
    Linker flags (Release):      
    Linker flags (Debug):        
    Precompiled headers:         YES

  OpenCV modules:
    To be built:                 core imgproc flann highgui features2d calib3d ml video objdetect contrib nonfree photo legacy gpu stitching ts videostab
    Disabled:                    world
    Disabled by dependency:      -
    Unavailable:                 androidcamera java ocl python

  GUI:
    QT 4.x:                      NO
    GTK+ 2.x:                    NO
    GThread :                    NO
    GtkGlExt:                    NO
    OpenGL support:              NO

  Media I/O:
    ZLib:                        /opt/lon/OpenCV-2.4.3/crosscompile_root/lib/libz.so (ver 1.2.7)
    JPEG:                        /opt/lon/OpenCV-2.4.3/crosscompile_root/lib/libjpeg.so (ver 80)
    PNG:                         /opt/lon/OpenCV-2.4.3/crosscompile_root/lib/libpng.so (ver 1.5.14)
    TIFF:                        /opt/lon/OpenCV-2.4.3/crosscompile_root/lib/libtiff.so (ver 42 - 4.0.3)
    JPEG 2000:                   NO
    OpenEXR:                     build (ver 1.7.1)

  Video I/O:
    DC1394 1.x:                  NO
    DC1394 2.x:                  NO
    FFMPEG:                      YES
      codec:                     YES (ver 53.35.0)
      format:                    YES (ver 53.21.1)
      util:                      YES (ver 51.22.2)
      swscale:                   YES (ver 2.1.0)
      gentoo-style:              YES
    GStreamer:                   NO
    OpenNI:                      NO
    OpenNI PrimeSensor Modules:  NO
    PvAPI:                       NO
    GigEVisionSDK:               NO
    UniCap:                      NO
    UniCap ucil:                 NO
    V4L/V4L2:                    NO/YES
    XIMEA:                       NO
    Xine:                        NO

  Other third-party libraries:
    Use TBB:                     NO
    Use Cuda:                    NO
    Use OpenCL:                  NO
    Use Eigen:                   NO

  Python:
    Interpreter:                 /usr/bin/python (ver 2.7.3)

  Tests and samples:
    Tests:                       YES
    Performance tests:           YES
    Examples:                    NO

  Install path:                  /opt/lon/OpenCV-2.4.3/build/install

  cvconfig.h is in:              /opt/lon/OpenCV-2.4.3/build
-----------------------------------------------------------------

Configuring done

当然,更细节的内容你也可以在CMakeCache.txt文件中看到。
哦,差点忘了,还要在CMakeCache.txt文件中添加点东西:


(1)
[quote]CMAKE_CXX_FLAGS:STRING=

这一行后面添加
  1. -mfpu=neon -I/opt/lon/OpenCV-2.4.3/crosscompile_root/include -L/opt/lon/OpenCV-2.4.3/crosscompile_root/lib -L/opt/lon/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux,-Wl,-rpath,/lib
复制代码

(2)
[quote]CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING=

这一行后面添加
  1. -lpthread –lrt
复制代码



好。下面就是make & make install 完成操作了。


至此,应该就能完成OpenCV的交叉编译了。然后将
/opt/lon/OpenCV-2.4.3/build/install
/opt/lon/OpenCV-2.4.3/crosscompile_root
两个文件夹下的内容合并,放到咱们的BB Black中,应该就能工作了。

如果编译失败,可考虑重装虚拟机。并且避免安装其他东西。这是阻碍了我很长时间的一个重要原因。希望能乡亲们带来一点点的提醒。  

已经上传了编译好的文件到下载中心了(审核通过之后会跟帖给出地址)。如果,如果有需要用的OpenCV,但又不想编译的朋友。。。。。。
尽管拿去用吧。

补充一点:
在字符界面下,Qt 程序的运行命令为./DEMO -qws










最新回复

我用你的方法编译用readelf -d 查看opencv生成的.so文件依赖的so,没有../../开头。我就直接用编译就会有.,/../开头的,我加了 -Wl,--rpath。虽然readelf -d 查看rpath那项是我指定的文件名,但是依赖的.so还是以../../开头的。我的问题就是这个问题http://blog.chinaunix.net/uid-22762900-id-4250152.html我编译方法是这个http://www.cnblogs.com/emouse/archive/2013/04/01/2993842.html   详情 回复 发表于 2014-10-16 21:19
点赞 关注(2)
个人签名这孩子,成熟的象征,理智的典范。
 

回复
举报

2781

帖子

419

TA的资源

五彩晶圆(中级)

沙发
 
果断收藏,备用
个人签名
 
 

回复

774

帖子

2

TA的资源

纯净的硅(中级)

板凳
 
编译之前最后make clean
否则会出现一些莫名其妙的问题

点评

谢谢提醒。不过我先给OpenCV文件夹做了备份,如果出错了直接删掉。  详情 回复 发表于 2014-5-25 13:03
 
 
 

回复

1560

帖子

24

TA的资源

五彩晶圆(初级)

4
 
本帖最后由 lonerzf 于 2014-5-25 13:04 编辑
airqj 发表于 2014-5-25 12:17
编译之前最后make clean
否则会出现一些莫名其妙的问题

谢谢提醒。不过我也给OpenCV文件夹做了备份,如果出错了直接删掉重来。
个人签名这孩子,成熟的象征,理智的典范。
 
 
 

回复

1246

帖子

18

TA的资源

五彩晶圆(初级)

5
 
这个必须MARK一下!!备用!
个人签名
 
 
 

回复

5979

帖子

8

TA的资源

版主

6
 
备用
个人签名生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
 
 
 

回复

6066

帖子

90

TA的资源

裸片初长成(初级)

7
 
加快进度喔,离活动结束时间不到1个月咯!

点评

我也想啊。可是老板又找了项目。只能尽力了。  详情 回复 发表于 2014-6-4 17:34
 
 
 

回复

1560

帖子

24

TA的资源

五彩晶圆(初级)

8
 
maylove 发表于 2014-6-4 10:03
加快进度喔,离活动结束时间不到1个月咯!

我也想啊。可是老板又找了项目。只能尽力了。
个人签名这孩子,成熟的象征,理智的典范。
 
 
 

回复

16

帖子

2

TA的资源

一粒金砂(中级)

9
 
楼主~这个编译完成了,放到BBB上了然后呢...放到BBB上的哪个文件夹啊?
不是要交叉编译程序吗?

情况是这样的:
我有opencv的一个程序,能在我的ubuntu主机上编译运行,是基于x64平台的.
我要怎么做才能让这个程序被交叉编译,然后能放在BBB上被执行呢?
还有,我源码里的头文件什么的是不是都要更改啊...

点评

你用交叉编译器编译好的库文件保存到某个特定的目录,然后给BBB也拷贝一份放到相同目录。至于PC机,你引用编译好的库文件就行了啊,这样生成的可执行文件也不是X86/64平台的了。  详情 回复 发表于 2014-8-11 09:58
 
 
 

回复

16

帖子

2

TA的资源

一粒金砂(中级)

10
 
还有..你上传的哪个opencv文件里面的include里面连opencv的头文件都没有...怎么编译啊...

点评

抱歉,我刚看了下,上传的文件好像跟opencv相关的install文件夹忘了放进去 。谢谢提醒。但是目前电脑不在手头。您可以重新编译下。好像步骤也不是特别多。  详情 回复 发表于 2014-8-11 09:55
 
 
 

回复

260

帖子

0

TA的资源

一粒金砂(高级)

11
 
当然,也可以从官网下载源码make。只是,别装2.8.12这个最新版,个别地方会报错
个人签名中空板|防静电中空板www.cheng-sen.com
 
 
 

回复

1560

帖子

24

TA的资源

五彩晶圆(初级)

12
 
糖馅饼 发表于 2014-8-11 01:01
还有..你上传的哪个opencv文件里面的include里面连opencv的头文件都没有...怎么编译啊...

抱歉,我刚看了下,上传的文件好像跟opencv相关的install文件夹忘了放进去 。谢谢提醒。但是目前电脑不在手头。您可以重新编译下。好像步骤也不是特别多。

点评

嗯~好的~今天晚上或者下午能上传吗.. 我以前编译过opencv,编译了好几天都没弄好... 我今天照着你这个再弄弄吧~ 如果不行的话就要麻烦您重新传一遍了... 十分感谢!  详情 回复 发表于 2014-8-11 10:51
个人签名这孩子,成熟的象征,理智的典范。
 
 
 

回复

1560

帖子

24

TA的资源

五彩晶圆(初级)

13
 
糖馅饼 发表于 2014-8-11 00:52
楼主~这个编译完成了,放到BBB上了然后呢...放到BBB上的哪个文件夹啊?
不是要交叉编译程序吗?


你用交叉编译器编译好的库文件保存到某个特定的目录,然后给BBB也拷贝一份放到相同目录。至于PC机,你引用编译好的库文件就行了啊,这样生成的可执行文件也不是X86/64平台的了。

点评

BBB上的angstrom不是有自带的opencv吗...? 还需要拷贝过去吗? 对了..我能不能直接把BBB上的库拷贝到PC机上用...  详情 回复 发表于 2014-8-11 10:55
个人签名这孩子,成熟的象征,理智的典范。
 
 
 

回复

16

帖子

2

TA的资源

一粒金砂(中级)

14
 
lonerzf 发表于 2014-8-11 09:55
抱歉,我刚看了下,上传的文件好像跟opencv相关的install文件夹忘了放进去 。谢谢提醒。但是目前电脑不在 ...

嗯~好的~今天晚上或者下午能上传吗..

我以前编译过opencv,编译了好几天都没弄好...
我今天照着你这个再弄弄吧~
如果不行的话就要麻烦您重新传一遍了...
十分感谢!

 
 
 

回复

16

帖子

2

TA的资源

一粒金砂(中级)

15
 
lonerzf 发表于 2014-8-11 09:58
你用交叉编译器编译好的库文件保存到某个特定的目录,然后给BBB也拷贝一份放到相同目录。至于PC机,你引 ...

BBB上的angstrom不是有自带的opencv吗...?
还需要拷贝过去吗?

对了..我能不能直接把BBB上的库拷贝到PC机上用...

点评

angstrom上简单多了,命令行从源安装即可。PC上可以参考这个帖子 https://bbs.eeworld.com.cn/thread-444036-1-1.html  详情 回复 发表于 2014-8-11 12:41
 
 
 

回复

1560

帖子

24

TA的资源

五彩晶圆(初级)

16
 
糖馅饼 发表于 2014-8-11 10:55
BBB上的angstrom不是有自带的opencv吗...?
还需要拷贝过去吗?


angstrom上简单多了,命令行从源安装即可。PC上可以参考这个帖子 https://bbs.eeworld.com.cn/thread-444036-1-1.html
个人签名这孩子,成熟的象征,理智的典范。
 
 
 

回复

16

帖子

2

TA的资源

一粒金砂(中级)

17
 
还是不行...楼主你能把你的opencv在PC和angstrom系统的文件发一下么...谢谢了!
 
 
 

回复

7

帖子

1

TA的资源

一粒金砂(中级)

18
 
楼主十分佩服你的博客,我一直有个疑问opencv源码里面有个文件夹叫3rdparty,里面的库几乎都有,像png,zlib,ffmpeg。。。,为什么我们还要自己提供库来编译

点评

官方的解释是 很明显,如果顺利,这里只需要在Cmake时使能这些功能就可以了。但我们也能看到,可能由于平台、系统架构等原因,这里并不能识别出这些第三方软件的二进制文件。所以要自己安装,生成相应平  详情 回复 发表于 2014-10-16 20:33
 
 
 

回复

1560

帖子

24

TA的资源

五彩晶圆(初级)

19
 
fkeujjpdc 发表于 2014-10-16 17:43
楼主十分佩服你的博客,我一直有个疑问opencv源码里面有个文件夹叫3rdparty,里面的库几乎都有,像png,zlib ...[/quote]



官方的解释是

[quote]This folder contains libraries and headers of a few very popular still image codecs
used by highgui module.
The libraries and headers are preferably to build Win32 and Win64 versions of OpenCV.
On UNIX systems all the libraries are automatically detected by configure script.
In order to use these versions of libraries instead of system ones on UNIX systems you
should use BUILD_ CMake flags (for example, BUILD_PNG for the libpng library).


很明显,如果顺利,这里只需要在Cmake时使能这些功能就可以了。但我们也能看到,可能由于平台、系统架构等原因,这里并不能识别出这些第三方软件的二进制文件。所以要自己安装,生成相应平台的二进制文件,由opencv调用。
不知这个回答正确与否,希望能帮到你。


个人签名这孩子,成熟的象征,理智的典范。
 
 
 

回复

7

帖子

1

TA的资源

一粒金砂(中级)

20
 
很感谢你的回答,我什么都没有下载采用cmake-gui进行配置。发现libpng,libjpeg,.....这些都可以识别到3rdparty,唯一就是识别不了ffmpeg,我直接编译也很顺利编译完成,结果就是自己写个测试程序的时候一直提示../../lib_coreimg.so这些库找不到,我用readelf -d lib_coreimg.so发现它依赖的库都是../,../开头的,我在网上找了好久有人说要加上这句set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER ),但是我加上了编译就报错了,原因是找不到3rdparty里面的一些头文件和库,我都不知道怎么解决了,你有没有什么好的办法啊
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表