月度归档:2022年09月

使用zlib动态库报错

项目本来是使用zlibstatic的,后来改为使用zlib动态库,但不知道何处仍然使用了zlibstatic,导致无法切换为动态库形式。

Qt已经自带的zlib的连接库。qCompress函数,1~9级。

调试模式下:系统库和连接目录下的库同名产生的BUG

调试时报错如下:

16:37:16: Debugging /Users/abc/work/woterm/woterm/bin/woterm.app/Contents/MacOS/woterm ...
dyld: Symbol not found: __cg_jpeg_resync_to_restart
  Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib
  Expected in: /Users/abc/work/woterm/woterm/third/jpeg/unix/lib/libJPEG.dylib
 in /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib
16:39:24: Debugging of /Users/abc/work/woterm/woterm/bin/woterm.app/Contents/MacOS/woterm has finished.

当前项目仅使用到该静态库,而该动态库,是没有使用到的,在调试阶段,因为系统图像库也依赖到该文件,从而导致加载了最新版本。但因为函数或参数缺失,直接报错。

解决办法是编译第三方库时,主动删除多余的库文件,避免一些奇怪问题。

代码声明模板

/*******************************************************************************************
*
* Copyright (C) %{CurrentDate:yyyy} Guangzhou AoYiDuo Network Technology Co.,Ltd. All Rights Reserved.
*
* Contact: http://www.aoyiduo.com
*
*   this file is used under the terms of the GPLv3[GNU GENERAL PUBLIC LICENSE v3]
* more information follow the website: https://www.gnu.org/licenses/gpl-3.0.en.html
*
*******************************************************************************************/

批处理中for/call/errorlevel返回值

因为做软件代码签名,在做脚本时,发现批处理脚本真是坑爹货,太多问题,故在以下记录一下。

rem @echo off

rem 必须使用setlocal,否则for()do(call)语句call函数返回值是无法正常返回的,故务必加上此句。
setlocal enabledelayedexpansion
set path_script=%~dp0
echo %path_script%

set myfile=%~1
set "myfile=%myfile:"=%"
for %%i in ("http://sha256timestamp.ws.symantec.com/sha256/","http://tsa.wosign.com/timestamp","http://timestamp.digicert.com") do (
    call :signmain "%%i" "%myfile%"

    rem 因为for语句的影响,必须和setLocal一起使用,才能返回errorlevel.
    rem 因为是延后扩展返回值,不能使用%errorlevel%必须使用双叹号。
    set retval=!errorlevel! 
    echo "retval:!retval!"
rem rem lss equ neq gtr geq leq
    if !retval! neq 0 (
        rem 必须加上/b参数,否则会是脚本退出,而不是call调用返回。
        exit /b 0 
    ) 
)

rem 此处不需要使用双叹号,能直接返回值。
call :signmain "a" "b"
echo "errorlevelLast:%errorlevel%"
exit /b 12

:signmain
set timeserver=%~1
set "timeserver=%timeserver:"=%"
set signfile=%~2
set "signfile=%signfile:"=%"
set /a num=0
:loop
echo "try to do the %num% time"
echo "timeserver:%timeserver%"
echo "signfile:%signfile%"
signtool sign /v /fd sha256 /sha1 8cff6301fbee55b05364e6f11d2e5ed090abcdef /tr "%timeserver%" /td sha256 "%signfile%"
set errcode=%errorlevel%
echo "errorlevel:%errcode%"
if %errcode% == 0 (
    echo "success:%signfile%"
    echo "-------------------------------------------------------------------"
    exit /b 0
) else (
    set /a num+=1
    if %num% lss 2 goto :loop
)
set /a retval=10+%num%
exit /b %retval%

Centos6编译gcc4.8.5

因为项目使用了Open-H264,如果要启用H264,则需要编译gcc4.8.5版本,取代系统的gcc4.47版本。

下载安装及依赖包

https://mirrors.tuna.tsinghua.edu.cn/gnu/gmp/gmp-4.3.2.tar.gz
https://mirrors.tuna.tsinghua.edu.cn/gnu/mpfr/mpfr-2.4.2.tar.gz
https://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.8.5/gcc-4.8.5.tar.gz
编译指令:
第一步:gmp / mpfr / mpc默认编译安装,相关库会安装至/usr/local/lib目录下
第二步:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
第三步:./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib --build=x86_64-redhat-linux

Centos6.5的软件源配置

当前只有阿里云软件源可用,配置如下:

sed -i "s|enabled=1|enabled=0|g" /etc/yum/pluginconf.d/fastestmirror.conf
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo https://www.xmpan.com/Centos-6-Vault-Aliyun.repo 
yum makecache
yum list
yum groupinstall "Development Tools"