3

我已经成功地为 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://stackoverflow.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

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

4

2 回答 2

3

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

于 2013-04-16T21:29:18.147 回答
0

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

我正在使用提升 1.55。

于 2014-10-18T06:27:31.360 回答