如何在Linux上编译ASL(基于boost的Adobe C ++ gui库)?

介绍

因此,我们花了一些时间与包括我在内的2个人组成的所有团队(意味着我们的努力不像您的职业一样专业)在CloudObserver试图使用ASL进行测试。

我们已经发现如何在Windows和Mac OS上编译ASL。

我们已经在ASL上创建了一些可视化/图形化GUI简单教程,这些教程完全适用于Mac OS X和Windows,所以我们已经看到Adobe Source Libraries可用于创建至少简单的UI和对话框。

比我们开始尝试使它在Linux上工作。

我们已经开始在Linux上编译ASL,首先修复asl_1.0.43_net_setup.sh过时的问题。 这是相当eazy这里是我们的代码:

#!/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进行了编译。 可悲的只有它。 这对我们来说毫无用处,因为我们想要一个GUI,而不仅仅是亚当读者。

所以我们在Windows上需要一些模拟libasl_widgets.dll - libasl_widgets_dev.a。 我引用ASL/platform_release/jamroot.jam

APL不支持gcc cygwin,虽然ASL可以。 仅支持APL的工具集是msvc和darwin

所以Adobe公司认为它支持Linux。 那只是悲伤! 方式2悲伤! 所以我们找到了missioncode项目。

它的日期到了2006年,并且提升了1.33.1,所以很伤心。 在这里也很伤心

任务使用的外部图书馆保存在这里。

这使它们保留在我们的构建中,并且意味着我们不必有任何神奇的构建脚本/规则来安装prereq。

这意味着没有任何独立的库文件构建文件 - 库被合并到项目中。 但是所有项目都是通过bjam编译的,并且在项目Boost中,ASL和其他库被细分为项目。 这意味着每个子项目按顺序编译并进入可执行文件或lib。

但是,我们真正需要来自ASL的只是简单的图形用户界面,不需要GUI中心的小型跨平台开源项目。 我们需要的只是一个按钮,一个缩放(aka滑块,aka trackbar)和一个文本输入工具。 以及未来发展的一些规模选项。 所以我们认为 - 让我们尽可能地从missioncode项目中强制执行A​​SL。

我们首先尝试了我们每天使用的一些现代Ubuntu 11和11以及OpenSuse(来自这里的Mono for VMware发行版)。 但它总是以失败告终。 所以我们认为 - 让我们先编译它,更适合项目时代的操作系统。 我们从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构建。 它在文档中声明: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行),但我认为这项工作不会太简单了。
无论如何,好运! :)

链接地址: http://www.djcxy.com/p/53341.html

上一篇: How to compile ASL (boost based Adobe C++ gui library) on linux?

下一篇: How can I find all synchronized on the same monitor in Java with Eclipse?