参考了文章<win10 Docker 创建Centos7 并使用xshell成功连接>实现了xsheel连接docker,但是docker中的端口在外部不能直接访问。后来搜到简书上的文章<Mac下 Docker 动态添加端口>,但是在"进入screen"步骤失败,一直报错"screen is terminating",后来参考菜鸟教程上的<Docker commit 命令>,先"docker commit :从容器创建一个新的镜像",然后执行"docker run :创建一个新的容器并运行一个命令",注意"使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。(docker run -it nginx:latest /bin/bash)",在创建新容器时候用"-p 50001:22 -p 5002:80"多开放了一个端口。

依据docker file来build镜像的时候,ARG指令定义参数,但是RUN指令去echo的时候总是输出${xxx},而非参数的实际值。然后关键字"docker ARG echo"搜到这条网页,明确说:“First: Make sure, your ARG comes after your FROM;Second: As you can see here, variables won’t be interpretad inside ‘’, so use “” instead.”。

编译boost的时候参考了知乎上的文章<Boost编译与使用>,注意参数的配置:“stage时使用stagedir,install时使用prefix”。本地编译的时候,只是将修改为toolset=msvc-14.2,因为电脑安装的是vs2019版本,而且install的时候–prefix="C:\Boost"安装到c盘下。然后进入到doc\html\boost_asio\example\cpp11目录下,调试测试asio程序。

在编译FreeRDP的时候,CMake构建工程时候报错"CMake Error Could NOT find OPENSSL",找到stackoverflow上的文章,设置路径即可(OPENSSL_ROOT_DIR = C:/OpenSSL-Win32),然后在文件CMakeLists.txt里参照设置"set(OPENSSL_ROOT_DIR ${CMAKE_SOURCE_DIR}/deps)",注意是OpenSSL的根目录,所以一开始路径中加了include,虽然说找到了OpenSSL的版本但还是报错,去掉include就可以了。

想编译ffmpeg,然后先看了用命令可以正常播放视频流的ffmpeg版本,然后就依据参数进行configure,结果报错"ERROR: gnutls not found using pkg-config",然后搜到csdn文章说执行"sudo apt-get install libunistring-dev",评论区里说执行"sudo apt-get install libgnutls-dev",但是这两个都并没有解决依然报同意的错误。后面搜到askubuntu文章<Unable to compile FFmpeg on Ubuntu 20.04>说"In the ffbuild directory (path : ffmpeg_sources/ffmpeg/ffbuild/), inspecting the config.log gives more info on the error message",然后看了发现报错提示"No package ‘gnutls’ found",然后关键字搜索后insmoin文章<No package ‘gnutls’ found 解决办法>说执行"sudo apt-get install libunistring-dev",然后执行后重新./configure就不再报错,奇怪之前不清楚为什么不行。报错"ERROR: ladspa.h header not found",关键字搜索后找到(The name of the needed package is “ladspa-devel” or “ladspa-sdk-dev”),然后安装ladspa-sdk-dev即可。报错"ffmpeg error libiec61883 not found",关键字搜到Raspberry Pi文章<Where is the manual for compiling ffmpeg on rpi4?>,参考该文章安装依赖库。报错"ERROR: libgsm not found",查看ffbuild目录内的config.log日志:"/tmp/ffconf.8vXAt6HH/test.c:1:10: fatal error: gsm/gsm.h: No such file or directory",安装gsm总是失败,然后关键字"ubuntu gsm-devel"搜到github上的sipXtapi工程:“Under Ubuntu: ‘apt-get install libgsm1-dev’ to install libgsm.”,然后安装libgsm。

关键字"ubuntu ffmpeg opencv"搜到csdn文章<Ubuntu 16.04下安装ffmpeg和opencv的安装与简介>,结果直接"apt install libopencv-dev python-opencv"命令安装的是opencv3.2的版本,会报错:“In function cvPointFrom32f:undefined reference to cvRound’”,网上说用2.4版本就行,但是感觉版本太低了。所以想下载cv4.5.1源码编译安装。然后关键字"ubuntu 编译 opencv"搜到博客园文章<在Ubuntu 16.04 LTS下编译安装OpenCV 4.1.1>说OPENCV_GENERATE_PKGCONFIG编译选项,然后搜到该选项后搜到csdn文章<OPENCV_GENERATE_PKGCONFIG - pkg-config --modversion opencv4>,参考该文章的cmake选项编译安装了opencv4.5.1版本。但是依然cvRound报错,因为ffmpeg的configure找到的还是3.2版本的cv的头文件,如果用4.5.1的头文件需要添加-std=c++11选项,但是ffmpeg的configure默认用的不是g++而是gcc,所以无法支持。前面在编译的时候,发现“make -j8”编译opencv结果报错:“virtual memory exhausted: Cannot allocate memory”,还是老老实实用make就好了。后来在ubuntu下终于"./configure --prefix=/usr/local --extra-version=0ubuntu0.2 --toolchain=hardened --libdir=/usr/lib/aarch64-linux-gnu --incdir=/usr/include/aarch64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-librsvg --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared"成功然后make编译了,但是执行ffmpeg命令报错:“error while loading shared libraries: libmysofa.so.1: cannot open shared object file: No such file or directory”。

调用avformat_open_input接口总是返回-1414092869,提示信息是"Immediate exit requested",然后搜到文章<FFMpeg,avformat_open_input回来immediate exit requested>说"avformat_open_input的时候设置了AVFormatContext的interrupt_callback,把里面的值设置大一点,应该就可以了",修改下果然就正常了。

g++查看版本"gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)",想升级一下gcc,然后下载了源码gcc-11.2.0.tar.gz,解压后直接执行configure结果报错"error: Building GCC requires GMP 4.2+, MPFR 3.1.0+ and MPC",关键字搜到csdn文章<Error:Building GCC requires GMP 4.2+, MPFR 3.1.0+ and MPC 0.8.0+>,依次编译安装然后再编译安装gcc即可。

参考了csdn文章<CentOS7中Samba环境搭建实录>来搭建samba服务,结果windows访问的时候总是提示"权限不够",后面发现使用pdbedit添加samba用户后,需要将共享目录属主用chown修改为samba用户,而不能是root用户。

用cmake-gui根据CMakeLists.txt编译folly的时候报错"Could NOT find Boost (missing: iostreams program_options system",后来在文件CMakeLists.txt中加了如下语句(应该有重复),最终成功生成了vs的工程文件folly.sln。
set(Boost_DEBUG ON)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
set(Boost_COMPILER -vc142)
“#” set(BOOST_ROOT “C:\Boost\”) ("#"是因为直接写#的话,文字会被格式化,下同)
“#” set(BOOST_ROOT=C:/Boost)
“#” set(Boost_INCLUDE_DIR=C:/Boost/include/boost-1_75)
“#” set(BOOST_LIBRARYDIR=C:/Boost/lib)
set(BOOST_ROOT C:/Boost)
set(Boost_INCLUDE_DIR C:/Boost/include/boost-1_75)
set(BOOST_LIBRARYDIR C:/Boost/lib)
find_package(Boost REQUIRED)
后面编译folly的logging_example时候报了连接错误’error LNK2019: unresolved external symbol "__declspec(dllimport) google::LogMessageFatal::LogMessageFatal(char const*, int)’,后面参考了博客园的文章<glog日志库使用笔记>,“在预处理器定义中添加GOOGLE_GLOG_DLL_DECL=宏后解决”,一开始只修改logging_example工程没有解决,后面在folly和folly_base工程的预处理器定义中都添加了宏定义才解决问题。后面又openssl大面积报错,然后windows工程的c++预处理器添加WIN32_LEAN_AND_MEAN宏就不再报错。

FreeRDP使用:
server端,.\freerdp-shadow-cli.exe /bind-address:192.168.1.100 /port:3389
client端,.\wfreerdp.exe /v:192.168.1.110 /p:3389

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐