构建加速C ++的WinCE(Build Boost C++ WinCE)

2019-08-21 00:27发布

我知道有类似的问题,但并不能帮助我。 我想在x86平台构建的Windows CE 6的推动作用。

我已经建立发布moded为成功WINCE共享库STLPort的,我也加一些补丁和整合OpenCE时间库和实现一些缺失的ANSI C函数。 STLPort的测试是确定的(只是用wcout,WCIN和wcerr in_avail()函数的问题,我不知道到底是哪里出了问题)。

打造提升我创建了一个批处理文件,并更改用户config.jam中以这种方式。 构建是好的,但似乎我编译我的Windows XP平台,而不是WinCE的。

升压构建系统是非常复杂的,我不理解它是如何工作的(文件是不是很好,在谷歌没有太多)。 升压的生成是好,但我不能运行的应用程序。 似乎缺少一些DLL或嘘DLL的是错误的。 我得到当我与调试器attacched该消息是“今夜processo all'estremita”德拉PIPE” - >‘在管的端没有进行处理’。 当我尝试从目标设备启动应用程序它没有任何效果。 我错了什么东西? 我怎么能告诉升压使用特定的配置?

另一个问题是,我不能看到生成日志。 我不知道到底我要建什么。 有没有办法,看看究竟是做什么?

我呼吁建立升压的批处理文件(我启动Visual Studio 2008的外壳):

@echo off
cls
bjam --with-chrono --with-date_time --with-thread toolset=msvc-CEPlatformName variant=release threading=multi link=shared runtime-link=shared

这是用户config.jam中位于工具/编译/ V2

using msvc : CEPlatformName:
    <compileflags>-D_CRT_SECURE_NO_WARNINGS
    <compileflags>-D_CRT_SECURE_NO_DEPRECATE
    <compileflags>-DBOOST_PROTO_MAX_ARITY=10
    <compileflags>-DBOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
    <compileflags>-DBOOST_MPL_LIMIT_METAFUNCTION_ARITY=10
    <compileflags>-D_WIN32_WCE=0x600
    <compileflags>-DUNDER_CE
    <compileflags>-DWINCE
    <compileflags>-Dx86
    <compileflags>-D_x86_
    <compileflags>-D_UNICODE
    <compileflags>-DUNICODE
    <linkflags>/subsystem:windowsce,6.00 
    <linkflags>/MACHINE:X86
    <linkflags>/NODEFAULTLIB:oldnames.lib
    <linkflags>/NODEFAULTLIB:libc.lib
    <linkflags>coredll.lib
    <linkflags>corelibc.lib
    <linkflags>ole32.lib
    <linkflags>oleaut32.lib
    <linkflags>uuid.lib
    <setup>C:/boost_1_53_0/CEPlatformNameConfig.bat.bat
; 


using stlport : 5.2 :
    C:/celib/stlport/stlport :
    C:/celib/stlport/bin 
;

这是配置脚本文件

@echo off
echo CONFIGURAZIONE PER LA COMPILAZIONE DI BOOST SU WINCE
echo.

rem ------------------------------------------------------------
set BOOST_DIR=c:\boost_1_53_0\boost
set PLATFORM=CEPlatformName
set TARGETCPU=x86
set OSVERSION=WCE600
set STLPORT_DIR=C:\celib\stlport
set STLPORT_INC=%STLPORT_DIR%\stlport
set STLPORT_LIB=%STLPORT_DIR%\bin\%PLATFORM%
rem ------------------------------------------------------------

if not %1==%&TARGETCPU% goto error

echo Setting Boost directory to %BOOST_DIR%
echo Setting OS Platform to %PLATFORM%
echo Setting target CPU to %TARGETCPU%
echo Setting OS Versione to %OSVERSION%
echo Setting STLPORT_INC to %STLPORT_INC%
echo Setting STLPORT_LIB to %STLPORT_LIB%

rem settin visual studio 2008 variable path
set SDKROOT=C:\Programmi\Windows CE Tools

set PATH=%VSINSTALLDIR%\VC\ce\bin\x86_cex86;%VSINSTALLDIR%\VC\bin;%VSINSTALLDIR%\Common7\IDE;%PATH%
set PLATFORMROOT=%SDKROOT%\%OSVERSION%\%PLATFORM%
set INCLUDE=%STLPORT_INC%;%PLATFORMROOT%\include\;%PLATFORMROOT%\include\%TARGETCPU%;%VCINSTALLDIR%\ce\include;%VCINSTALLDIR%\ce\atlmfc\include;%VSInstallDir%\SmartDevices\SDK\SQL Server\Mobile\v3.0;
set LIB=%STLPORT_LIB%;%PLATFORMROOT%\lib\%TARGETCPU%;%VCINSTALLDIR%\ce\ATLMFC\LIB\%TARGETCPU%;%VCINSTALLDIR%\ce\LIB\%TARGETCPU%

echo PATH at %PATH%
echo.

echo INCLUDE is %INCLUDE%
echo.

echo LIB is %LIB%
echo.

goto exit

:error
echo Invali Target CPU
goto exit

:exit
echo impostazioni avvenute con successo

编辑

看来,在用户config.jam中的compileflags没有效果...或者更好的用户似乎-config.jam中没有任何影响

编辑2我发现一个问题,

using msvc : CEPlatformName :
        <compileflags>-D WINCE

问题是,该指令不定义任何东西。 我也试着

using msvc : CEPlatformName :
        <compileflags>/D_CRT_SECURE_NO_WARNINGS

但结果是一样的。

Answer 1:

我已经找到了问题
我终于建立一个自定义的x86目标boost.chrono的Boost.Date_Time boost_system和boost.thread FOW的Windows CE 6.0。

我已经改变了用户config.jam中以这种方式

 using msvc : 9.0~CEPlatformName : "C:\...\cl.exe" : <compileflags>-D_CRT_SECURE_NO_WARNINGS <compileflags>-D_CRT_SECURE_NO_DEPRECATE ... <setup>CEPlatformNameConfig.bat ; 

在这种方式的bjam要求配置正确的批处理文件生成系统。 如果没有指定编译器的bjam将vcvarsall.bat调用和编译器标志将被忽略。
现在的bjam调用是:

bjam ... toolset=msvc-9.0~CEPlatformName ...

同样重要的是正确定义`x86`和`_X86_`。 需要注意的是`X86`将casue STLPort的承担错误的目录ANSI C语言库文件。

但是,我已经将提振:: this_thread :: sleep_for()函数的问题。 我知道,提升使用TLS进行此操作,我知道TLS没有完全WinCE下实现的。 我可以使用Win32库的简单::睡眠()替换该功能。
我只肯定WinCE的具有`TlsAlloc()`,`TlsFree()`,`TlsGetValue()`和`TlsSetValue()`的功能,并且具有至少为`TLS TLS_MINIMUM_AVAILABLE`槽被至少限定为64 。



Answer 2:

Finaly我能够建立Boost.Thread Boost.System Boost.Chrono Boost.DateTime Boost.Regex在调试和发布模式。

这个问题是根据该端口(http://stackoverflow.com/questions/16016637/boost-c-and-windows-ce-6-0)是WINCE不支持长文件名。 DLL名称的可以更大然后32个字符。

名称长度的同样的问题引起this_thread :: sleep_for到不工作。

感谢所有的人帮助了我。



文章来源: Build Boost C++ WinCE