介绍
因此,我们与包括我在内的2个人组成的所有团队一起度过了几天(这意味着我们的努力不如您的专业)在CloudObserver上进行尝试,以便与ASL脱颖而出。
我们已经找到how to compile ASL on windows and Mac OS.
我们已经在ASL上创建了一些视觉/图形GUI simple tutorials,可以与Mac OS X和Windows完美配合,因此我们已经看到Adobe Source Libraries可用于创建至少简单的UI和对话框。
比我们开始尝试使其在Linux上运行。
肉
我们首先通过修复过期的asl_1.0.43_net_setup.sh开始在Linux上编译ASL。这是我们的代码,这很容易实现:
#!/bin/bash
ASL_DISTRO_NAME=asl_1.0.43.tgz
ASL_NAME=source_release
APL_DISTRO_NAME=apl_1.0.43.tgz
APL_VERSION=1.0.43
APL_NAME=platform_release
ASL_DISTRO_SITE=surfnet.dl.sourceforge.net
BOOST_NAME=boost_1_44_0
BOOST_VERSION=1.44.0
BOOST_DISTRO_NAME="$BOOST_NAME".tar.gz
#-L protects against redirects
CURL_CMD=curl\ -L
INTEL_TBB_NAME=tbb30_018oss
INTEL_TBB_DISTRO_NAME="$INTEL_TBB_NAME"_src.tgz
# Run a command, and echo before doing so. Also checks the exit
# status and quits if there was an error.
#
# WARNING : Does *not* work when the command uses the redirection operator (>)
#
echo_run ()
{
echo "$@"
"$@"
r=$?
if test $r -ne 0 ; then
exit $r
fi
}
test_path()
{
hash $1 1>/dev/null 2>/dev/null
}
WD=`pwd`
MACHINE=`uname`
HERE=`dirname $0`
cd $HERE
if [ "$1" != "" ]; then
ASL_DISTRO_SITE="$1"
fi
#http://surfnet.dl.sourceforge.net/project/adobe-source/adobe-source/1.0.43/asl_1.0.43.tgz
if [ ! -e $ASL_DISTRO_NAME ]; then
echo_run ${CURL_CMD} http://$ASL_DISTRO_SITE/project/adobe-source/adobe-source/$APL_VERSION/$ASL_DISTRO_NAME -o $ASL_DISTRO_NAME
fi
if [ ! -e $APL_DISTRO_NAME ]; then
echo_run ${CURL_CMD} http://$ASL_DISTRO_SITE/project/adobe-source/adobe-source/$APL_VERSION/$APL_DISTRO_NAME -o $APL_DISTRO_NAME
fi
if [ ! -e $BOOST_DISTRO_NAME ]; then
echo_run ${CURL_CMD} http://$ASL_DISTRO_SITE/project/boost/boost/$BOOST_VERSION/$BOOST_DISTRO_NAME -o $BOOST_DISTRO_NAME
fi
if [ ! -e $INTEL_TBB_DISTRO_NAME ]; then
echo_run ${CURL_CMD} http://www.threadingbuildingblocks.org/uploads/78/154/3.0/$INTEL_TBB_DISTRO_NAME -o $INTEL_TBB_DISTRO_NAME
fi
if [ ! -d adobe_root ]; then
echo_run mkdir adobe_root
fi
if [ ! -d adobe_root/adobe_source_libraries ]; then
echo_run tar -xzf $ASL_DISTRO_NAME
echo_run mv $ASL_NAME adobe_root/adobe_source_libraries
fi
if [ ! -d adobe_root/adobe_platform_libraries ]; then
echo_run tar -xzf $APL_DISTRO_NAME
echo_run mv $APL_NAME adobe_root/adobe_platform_libraries
fi
if [ ! -e adobe_root/boost_libraries/INSTALL ]; then
# move the boost distro into place
echo_run tar -xzf $BOOST_DISTRO_NAME
echo_run rm -rf adobe_root/boost_libraries
echo_run mv $BOOST_NAME adobe_root/boost_libraries
fi
if [ ! -e adobe_root/intel_tbb_libraries/README ]; then
# move the intel_tbb distro into place
echo_run tar -xzf $INTEL_TBB_DISTRO_NAME
echo_run rm -rf adobe_root/intel_tbb_libraries
echo_run mv $INTEL_TBB_NAME adobe_root/intel_tbb_libraries
fi
cd $HERE
echo_run adobe_root/adobe_source_libraries/tools/patch_boost.sh
if [[ $MACHINE == "Darwin" ]]
then
cd adobe_root/adobe_platform_libraries
else
cd adobe_root/adobe_source_libraries
fi
echo_run ../adobe_source_libraries/tools/build.sh
echo Done!
exit 0
因此,我们编译了libasl_dev.a。可悲的是只有它。这对我们来说毫无用处,因为我们想要have a GUI,而不仅仅是Adam读者。
因此,我们需要Windows上的libasl_widgets.dll类似物-libasl_widgets_dev.a。我引用
ASL/platform_release/jamroot.jam
因此,adobe向我们致意,它确实支持Linux。真是可悲!方式2伤心!因此,我们找到了missioncode project。
它的日期定为2006年,并 boost 了1.33.1,这让它很难过。 here也很伤心
这意味着,thay没有用于库的任何单独的构建文件-库被合并到项目中。但是所有项目都是通过bjam编译的,在项目Boost,ASL和其他库中,它们都是subdivided into projects。这意味着每个子项目都将按顺序编译为适当的库或lib。
但是,对于非以GUI为中心的小型跨平台开源项目的简单需求,ASL真正需要的只是简单的GUI。我们需要的只是一个按钮,一个比例尺(又称滑块,又称轨迹栏)和一个文本输入栏。以及一些 future 发展的规模选择。因此,我们想到了-尽我们所能让compele ASL来自Missioncode项目。
我们首先尝试了每天使用的一些现代Ubuntu 11和11以及OpenSuse(从here发行的适用于VMware的Mono)。但是它不断失败,并带来大量错误。因此,我们认为-让我们在更早的版本上进行编译,更适合于项目时代的OS。我们从Ubuntu 4开始,然后逐个版本升级。它在6.10上进行了编译,并提供了一些小修改,例如
diff -crB original/external/adobe/adobe/basic_sheet.hpp modified/external/adobe/adobe/basic_sheet.hpp
*** original/external/adobe/adobe/basic_sheet.hpp 2011-06-25 08:21:48.000000000 +0400
--- modified/external/adobe/adobe/basic_sheet.hpp 2011-06-25 08:24:33.000000000 +0400
***************
*** 13,18 ****
--- 13,19 ----
#include <deque>
#include <map>
+ #include <vector>
#include <adobe/name.hpp>
#include <adobe/any_regular.hpp>
diff -crB original/external/adobe/source/xstring.cpp modified/external/adobe/source/xstring.cpp
*** original/external/adobe/source/xstring.cpp 2011-06-25 08:21:46.000000000 +0400
--- modified/external/adobe/source/xstring.cpp 2011-06-25 08:24:10.000000000 +0400
***************
*** 331,337 ****
{
typedef std::iterator_traits<store_iterator>::difference_type difference_type;
! difference_type range_size(boost::size(range));
if (!range_size) return glossary_m.end();
--- 331,337 ----
{
typedef std::iterator_traits<store_iterator>::difference_type difference_type;
! difference_type range_size(boost::distance(range));
if (!range_size) return glossary_m.end();
我们让Missioncode用Widgets编译ASL。小部件完全是由任务代码augthor创建的,因此如果使用该工具则没有任何保证。.但是我们已编译了完整的任务代码主干(也称为MissionPhoto的应用程序),并且应用程序运行良好。
我们试图用完整的ASL编译我们的代码,但是看来我们在窗口上拥有的ASL api不能在我们在Windows上拥有的ASL上工作...就像或多或少都没有。=(
没有尽头
但是,仍然希望你们中的任何一位有丰富经验的SO用户都可以研究在MissionCode和当前ASL上拥有的ASL,并将为我们所有人提供适用于Linux的ASL 1.0.43。
最佳答案
看来,当前版本的apl不支持针对linux的构建。它在docs:http://stlab.adobe.com/asl_readme.html#Building_for_Mac.2C_.2ANIX中声明。您也可以在apl目录结构中看到它。有$ APL_ROOT/windows和$ APL_ROOT/macintosh目录,但是没有任何与Linux相关的目录(例如gtk,qt等)。
关于“任务代码”项目:他们使用一些旧版本的Adobe库(对于asl和apl等没有分隔)。早期版本的adobe libs可能支持针对linux的构建(或者可能是任务代码程序员自己添加了gtk的代码)。
从理论上讲,可以通过实现与win和macos实现的功能相似的功能来增加对新平台的支持(在当前版本中,每个代码的长度约为6 ... 8k行),但是我认为这项工作不会太容易了。
无论如何,祝你好运! :)
关于c++ - 如何在Linux上编译ASL(基于Boost的Adobe C++ gui库)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6461621/