cef编译

之前用cef用的官方编译后的, 下载下载cmake一下, 然后生成visual studio解决方案, 就行了, 但是在最近的项目中, 需要用到MP3和MP4的支持, 网上下载的都是不全的, 现在想自己编译一下, 由于长城防火墙, 屏蔽了国外的技术网站, 导致了我一直不想从源代码开始编译。现在正式进入主题吧

我是用的亚马逊服务器
200g硬盘
1核,2g
windows server 2016
64位,英文环境
python2.7
git
svn
基础环境

CEF_ARCHIVE_FORMAT=tar.bz2
DEPOT_TOOLS_WIN_TOOLCHAIN=0
CEF_USE_GN=0
GYP_DEFINES=buildtype=Official
GYP_MSVS_VERSION=2013(根据你的VS版本设置)
GYP_GENERATORS=ninja,msvs-ninja
DEPOT_TOOLS_UPDATE=0

python automate-git.py –download-dir=c:cefsource –branch=2623 –no-build –no-distrib –force-clean

python automate-git.py –download-dir=c:cefcefsource –branch=2623 –no-update –no-debug-build –build-log-file –verbose-build –force-distrib –force-build

vs2013.5_ult_enu.iso
windows 10 sdk

交互:
https://www.bbsmax.com/A/xl56rALm5r/

VS中解决LIBCMTD.lib和uafxcwd.lib冲突(uafxcw.lib LIBCMT.lib冲突)

如果在编译MFC程序的时候出现下列及类似的错误:

1>uafxcwd.lib(afxmem.obj) : error LNK2005: “void * __cdecl operator new(unsigned int)” (??2@YAPAXI@Z) 已经在 LIBCMTD.lib(new.obj) 中定义
1>uafxcwd.lib(afxmem.obj) : error LNK2005: “void __cdecl operator delete(void *)” (??3@YAXPAX@Z) 已经在 LIBCMTD.lib(dbgdel.obj) 中定义
1>uafxcwd.lib(afxmem.obj) : error LNK2005: “void * __cdecl operator new[](unsigned int)” (??_U@YAPAXI@Z) 已经在 libcpmtd.lib(newaop.obj) 中定义
1>uafxcwd.lib(afxmem.obj) : error LNK2005: “void __cdecl operator delete[](void *)” (??_V@YAXPAX@Z) 已经在 LIBCMTD.lib(delete2.obj) 中定义

解决方法如下:

项目属性页-》链接器-》输入

做如下改动,注意顺序

debug版本

附加依赖库:uafxcwd.lib;LIBCMTD.lib;
忽略特定默认库:LIBCMTD.lib;uafxcwd.lib

release版本

附加依赖库:uafxcw.lib;LIBCMT.lib;

忽略特定默认库:LIBCMT.lib;uafxcw.lib

错误原因是由于这二个库有各自的new和delete,这是冲突的,需要指定顺序。正确加载库的顺序是uafxcw.lib Libcmtd.lib,而默认的是Libcmtd.lib uafxcw.lib。

转自:https://blog.csdn.net/whatday/article/details/53188029

AfxGetApp()->m_pMainWnd和AfxGetMainWnd()

今天在解决一个bug时关注到了这两个看上去貌似一样的东西:AfxGetApp()->m_pMainWnd和AfxGetMainWnd()。平时不用多线程时,都是随便用,用法上也没什么区别,也没去专门的研究。当有BUG存在时,才意识到。

由于我是在多线程中使用,每次用AfxGetMainWnd来sendmessage时,都会崩溃,将AfxGetMainWnd提取出来设给一个pWnd时,调试显示的是为空。然后我换成AfxGetApp()->m_pMainWnd后,调试却显示有值!

因此这两个东西的用法还是有不一样的:

1、AfxGetApp()->m_pMainWnd在多线程中,获得的是应用程序主线程的句柄。在这个应用程序中是唯一的。

2、AfxGetMainWnd()获得的是当前线程的句柄。,在多线程的应用程序中也是不唯一的。

cef调用主窗口应该使用AfxGetApp()->m_pMainWnd

MFC设置壁纸

// 设置强制
// 使用前必须初始化COM组件
static BOOL SetWallpaper(LPCTSTR lpszWallPaper, DWORD dwStyle = WPSTYLE_STRETCH)
{
    HRESULT hr;
    IActiveDesktop* pIAD;
    //创建接口的实例
    hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
        IID_IActiveDesktop, (void**)&pIAD);
    if (!SUCCEEDED(hr)) {
        return FALSE;
    }

    //COMPONENTSOPT co = {0};
    //co.dwSize = sizeof(COMPONENTSOPT);
    //co.fEnableComponents = TRUE;
    //co.fActiveDesktop = TRUE;
    //hr = pIAD->SetDesktopItemOptions(&co, 0);
    //if ( !SUCCEEDED(hr) ) 
    //    goto exit;
    ////将文件名改为宽字符串,这是IActiveDesktop::SetWallpaper的要求
    //WCHAR   wszWallpaper [MAX_PATH];
    //LPTSTR lpStr = strPicFile.GetBuffer(strPicFile.GetLength() );
    //MultiByteToWideChar(CP_ACP, 0, lpStr, -1, wszWallpaper, MAX_PATH);
    //strPicFile.ReleaseBuffer();
    //设置墙纸
    hr = pIAD->SetWallpaper(lpszWallPaper, 0);
    if (!SUCCEEDED(hr)) {
        goto exit;
    }
        
    //设置墙纸的样式
    //WALLPAPEROPT wpo;
    //wpo.dwSize = sizeof(wpo);
    //wpo.dwStyle = dwStyle;
    //hr = pIAD->SetWallpaperOptions(&wpo, 0);
    //if(!SUCCEEDED(hr)) goto exit;
    //应用墙纸的设置
    hr = pIAD->ApplyChanges(AD_APPLY_ALL);
    if (!SUCCEEDED(hr)) {
        goto exit;
    }
    //读取墙纸的文件名并打印在debug窗口内
    //TCHAR szWallPaper[MAX_PATH];
    //hr = pIAD->GetWallpaper(szWallPaper, MAX_PATH, 0);
    //MessageBox(0,szWallPaper, 0, 0);
    //CString strFile = lpszWallPaper;
    //TRACE(strFile); //如果不用位图的话,这里有你意想不到的发现
    //释放接口的实例

exit:
    pIAD->Release();
    return SUCCEEDED(hr);
}

LibreOffice在Windows平台编译

LibreOffice在Windows平台编译

环境要求

  Windows 10 专业版 英语语言 64位

  Visual Studio 2017 专业版

  Windows8.1 SDK

  JAVA

  Cygwin

注意

  确保磁盘至少有50GB可用空间

  需要网络连接, 用于下载依赖库和代码

  安装JAVA环境, 如果编译32位安装32位JAVA, 编译64位程序, 需要安装64位JAVA

  下载Cygwin 如果编译32位安装32位Cygwin32, 编译64位程序, 需要安装64位Cygwin64

保存到D盘

  最新代码必须使用Visual Studio 2017

编译x86

1.安装cygwin

  在开始菜单找到Visual Studio 2017文件夹x86 Native Tools Command Prompt for VS 2017程序右击以管理员方式运行

  打开程序后, 输入d:进入D盘, 执行以下命令

setup-x86.exe -P autoconf -P automake -P bison -P cabextract -P doxygen -P flex -P gcc-g++ ^
                -P gettext-devel git -P gnupg -P gperf -P make -P mintty ^
                -P nasm -P openssh -P openssl -P patch -P perl -P python -P python3 ^
                -P pkg-config -P rsync -P unzip -P vim -P wget -P zip -P perl-Archive-Zip ^
                -P perl-Font-TTF -P perl-IO-String

  输入命令后会弹出程序安装界面, 一直下一步就可以了, 安装完成后在原先程序执行C:\cygwin86\bin\mintty.exe -i /Cygwin-Terminal.ico - (我安装的目录是C:cygwin86)

2.安装GNU make

在cygwin程序中依次输入以下命令

mkdir -p /opt/lo/bin
cd /opt/lo/bin
wget http://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
mv make-4.2.1-msvc.exe make
chmod a+x make
3.安装ant和junit

在cygwin程序中依次输入以下命令

mkdir -p /cygdrive/d/sources
cd /cygdrive/d/sources
wget https://archive.apache.org/dist/ant/binaries/apache-ant-1.9.5-bin.tar.bz2
tar -xjvf apache-ant-1.9.5-bin.tar.bz2
wget http://downloads.sourceforge.net/project/junit/junit/4.10/junit-4.10.jar
4.克隆LibreOffice源代码

在cygwin程序中依次输入以下命令

cd /cygdrive/d/sources
git clone git://gerrit.libreoffice.org/core LibreOffice
5.配置和构建编译脚本

在cygwin程序中依次输入以下命令

mkdir buildx86
cd buildx86
../LibreOffice/autogen.sh \
--with-external-tar=/cygdrive/d/sources/lo-externalsrc \
--with-junit=/cygdrive/d/sources/junit-4.10.jar \
--with-ant-home=/cygdrive/d/sources/apache-ant-1.9.5 \
--enable-pch --disable-ccache \
--with-windows-sdk=8.1 \
--with-visual-studio=2017
6.开始LibreOffice编译

在cygwin程序中输入C:/cygwin86/opt/lo/bin/make这样就开始编译了

编译成功后存在sources/buildx86/instdir目录中

编译x64

1.安装cygwin

    在开始菜单找到Visual Studio 2017文件夹x64 Native Tools Command Prompt for VS 2017程序右击以管理员方式运行

打开程序后, 输入d:进入D盘, 执行以下命令

setup-x86_64.exe -P autoconf -P automake -P bison -P cabextract -P doxygen -P flex -P gcc-g++ ^
                -P gettext-devel git -P gnupg -P gperf -P make -P mintty ^
                -P nasm -P openssh -P openssl -P patch -P perl -P python -P python3 ^
                -P pkg-config -P rsync -P unzip -P vim -P wget -P zip -P perl-Archive-Zip ^
                -P perl-Font-TTF -P perl-IO-String

  输入命令后会弹出程序安装界面, 一直下一步就可以了, 安装完成后在原先程序执行C:\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico - (我安装的目录是C:cygwin64)

2.安装GNU make

在cygwin程序中依次输入以下命令

mkdir -p /opt/lo/bin
cd /opt/lo/bin
wget http://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
mv make-4.2.1-msvc.exe make
chmod a+x make
3.安装ant和junit

在cygwin程序中依次输入以下命令

mkdir -p /cygdrive/d/sources
cd /cygdrive/d/sources
wget https://archive.apache.org/dist/ant/binaries/apache-ant-1.9.5-bin.tar.bz2
tar -xjvf apache-ant-1.9.5-bin.tar.bz2
wget http://downloads.sourceforge.net/project/junit/junit/4.10/junit-4.10.jar
4.克隆LibreOffice源代码

在cygwin程序中依次输入以下命令

cd /cygdrive/d/sources
git clone git://gerrit.libreoffice.org/core LibreOffice
5.配置和构建编译脚本

在cygwin程序中依次输入以下命令

mkdir buildx64
cd buildx64
../LibreOffice/autogen.sh \
--with-external-tar=/cygdrive/c/sources/lo-externalsrc \
--with-junit=/cygdrive/c/sources/junit-4.10.jar \
--with-ant-home=/cygdrive/c/sources/apache-ant-1.9.5 \
--enable-pch --disable-ccache \
--with-windows-sdk=8.1 \
--with-visual-studio=2017 \
--enable-64-bit
6.开始LibreOffice编译

在cygwin程序中输入C:/cygwin64/opt/lo/bin/make这样就开始编译了

编译成功后存在sources/buildx86/instdir目录中

注:

官方教程

相关目录:

  LibreOffice Writer(Word)

  编译文件夹\instdir\program\swriter.exe

  LibreOffice Impress(PPT)

  编译文件夹\instdir\program\simpress.exe

  LibreOffice Calc(Excel)

  编译文件夹\instdir\program\scalc.exe

已知问题

  如果出现找不到r命令的错误, 请执行git config --global core.autocrlf input重新克隆代码

  克隆代码太慢可以使用

git clone http://anongit.freedesktop.org/git/libreoffice/core.git LibreOffice

编译选项

  中文语言 --with-lang=zh-CN

  默认编译release, 如果想编译debug版本, 请指定--enable-debug

处理器主频3.30GHz编译耗时6小时

Windows 编译 LibreOffice

Windows8.1 SDK
cygwin https://cygwin.com/setup-x86.exe
setup-x86_64.exe -P autoconf -P automake -P bison -P cabextract -P doxygen -P flex -P gcc-g++ ^

            -P gettext-devel git -P gnupg -P gperf -P make -P mintty ^
            -P nasm -P openssh -P openssl -P patch -P perl -P python -P python3 ^
            -P pkg-config -P rsync -P unzip -P vim -P wget -P zip -P perl-Archive-Zip ^
            -P perl-Font-TTF -P perl-IO-String

mkdir -p /opt/lo/bin
cd /opt/lo/bin
wget http://dev-www.libreoffice.org/bin/cygwin/make-4.2.1-msvc.exe
mv make-4.2.1-msvc.exe make
chmod a+x make

mkdir -p /cygdrive/c/sources
cd /cygdrive/c/sources
wget https://archive.apache.org/dist/ant/binaries/apache-ant-1.9.5-bin.tar.bz2
tar -xjvf apache-ant-1.9.5-bin.tar.bz2
wget http://downloads.sourceforge.net/project/junit/junit/4.10/junit-4.10.jar

cd /cygdrive/c/sources
git clone git://gerrit.libreoffice.org/core libo-core

/cygdrive/c/sources/libo-core/autogen.sh \
–with-external-tar=/cygdrive/c/sources/lo-externalsrc \
–with-junit=/cygdrive/c/sources/junit-4.10.jar \
–with-ant-home=/cygdrive/c/sources/apache-ant-1.9.5 \
–enable-pch –disable-ccache \
–enable-64-bit \
–with-windows-sdk=8.1 \
–with-visual-studio=2017

https://wiki.documentfoundation.org/Development/BuildingOnWindows