提升 C++ 和 Windows CE 6.0

Posted

技术标签:

【中文标题】提升 C++ 和 Windows CE 6.0【英文标题】:Boost C++ and Windows CE 6.0 【发布时间】:2013-04-15 13:38:09 【问题描述】:

我已经成功地为 Windows CE 6.0 构建了 STLPort 和 Boost c++。我可以在调试结束发布模式下使用 Windows CE 6 和 STLPort 运行应用程序。

我使用以下批处理文件构建了 boost:

@echo off
cls

:build

:release

echo building boost in release shared library

bjam ^
--with-system ^
--with-chrono ^
--with-date_time ^
--with-thread ^
--with-atomic ^
toolset=msvc-9.0~CEPlatform ^
variant=release ^
threading=multi ^
stdlib=stlport-5.2.1 ^
link=shared ^
runtime-link=shared

:debug

echo building boost in debug shared library

bjam ^
--with-system ^
--with-chrono ^
--with-date_time ^
--with-thread ^
--with-atomic ^
toolset=msvc-9.0~CEPlatform ^
define=_STLP_DEBUG=1 ^
variant=debug ^
threading=multi ^
stdlib=stlport-5.2.1 ^
link=shared ^
runtime-link=shared

goto exit

:exit
pause

我已根据此链接修改了 user-config.jam:[http://***.com/questions/15906901/build-boost-c-wince/15939679#15939679][1]

我可以在发布模式下使用 boost 运行应用程序,但存在一些问题:

boost::this_thread::sleep_for(boost::chrono::seconds(1));

将导致应用程序在发布模式下崩溃:如果先前的语句不存在,我将无法应用程序。似乎失去了一些依赖。我使用了 Dependency walker 并解决了所有依赖项(COREDLL.DLL、STLPORT.5.2.DLL、BOOST_SYSTEM-VC90-MT-P-1_53.DLL、BOOST_THREAD-VC90-MT-P-1_53.DLL、BOOST_DATE_TIME-VC90- MT-P-1_53.DLL)。

在调试模式下,情况最糟糕:如果包含 boost 标头(boost/thread.hpp、boost/chorono.hpp),我将无法启动应用程序。似乎又缺少一些 dll,但依赖 walker 似乎一切正常。没有丢失的 DLL... 链接的 DLL 是: COREDLL.DLL、STLPORTSTLD.5.2.DLL、BOOST_SYSTEM-VC90-MT-GDP-1_53.DLL、BOOST_THREAD-VC90-MT-GDP-1_53.DLL、BOOST_DATE_TIME-VC90-MT-GDP-1_53.DLL

我是不是错过了什么。有人有想法吗?

【问题讨论】:

【参考方案1】:

使用隐式加载加载时,CE 的 DLL 名称长度限制为 32 个字符。疯狂的是,这仍然没有在 CE 中修复(更不用说正确的错误消息),也没有在 Boost 中解决。我们在工作中采用的方法是使用“bsystem”而不是“boost_system”(类似“bthread”、“bregex”等)#ifdef UNDER_CE。也许我们还删除了“-mt”,因为 CE 不支持单线程代码,但我必须检查源代码。

【讨论】:

this_thread::sleep_for 出于同样的原因没有工作。我用 --layout-system 构建了 boost 并添加了定义 BOOST_AUTO_LINKAGE_NOMANGLE。现在我在 boos_LIBRARY_NAME.dll 中有名称。非常感谢!!! 啊,很高兴知道 Boost 确实支持这一点,尽管方式不同! 但是要小心,因为调试和发布库的名称是相同的,所以你必须在调试模式下构建 --stagedir=./stage/debug 和发布 --stagedir/release跨度> 【参考方案2】:

这些选项可能已被更高版本的 boost 更改。 我使用 --layout=system 选项和 BOOST_AUTO_LINK_NOMANGLE 宏,它们可以工作。

我正在使用 boost 1.55。

【讨论】:

以上是关于提升 C++ 和 Windows CE 6.0的主要内容,如果未能解决你的问题,请参考以下文章

摩托罗拉 MC3190 掌上电脑的 windows 6.0 ce 任务管理器

如何在 Windows CE 6.0 设备中配置 *** 客户端 [关闭]

Windows 8 上的 Visual C++ 6.0

Xamarin.Forms 可以通过 Wi-FI 在 iPhone(真实设备)上工作,而无需连接到来自 VS 2019 CE Windows 10 的真实 Mac Os?

在 C++ 中为 Windows CE 在 Linux 中开发

指针对象在 Visual C++ 6.0 中创建 windows 错误