【问题标题】:How to compile ASL (boost based Adobe C++ gui library) on linux?如何在 Linux 上编译 ASL(基于增强的 Adob​​e C++ gui 库)?
【发布时间】:2011-09-21 15:24:35
【问题描述】:

简介

因此,我们在 CloudObserver 与包括我在内的 2 个人组成的所有团队一起度过了几天(这意味着我们的努力不如你的专业),试图通过 ASL 成功。

我们发现how to compile ASL on windows and Mac OS.

我们在 ASL 上创建了一些可视/图形 GUI simple tutorials,它们与 Mac OS X 和 Windows 完美配合,因此我们看到 Adob​​e 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,而不仅仅是亚当读者。

所以我们需要一些类似于 Windows 上的 libasl_widgets.dll - libasl_widgets_dev.a。我引用ASL/platform_release/jamroot.jam

APL 不支持 gcc cygwin,但 ASL 支持。仅支持 APL 的工具集 是 msvc 和 darwin

所以 adobe 告诉我们它确实支持 Linux。那只是悲伤!方式 2 伤心!于是我们找到了missioncode project。

它的日期为 2006 年并提升了 1.33.1,所以很伤心。 here 也很伤心

使用的外部库 任务保存在这里。

这会将它们保留在我们的构建中,并且 意味着我们不必有任何 神奇的构建脚本/规则来获取 已安装先决条件。

这意味着他们没有任何单独的库构建文件 - 库被合并到项目中。但所有项目都是通过 bjam 编译的,项目内部的 Boost、ASL 和其他库是subdivided into projects。这意味着每个子项目都按顺序编译并编译为可执行文件或 lib。

但我们真正需要 ASL 的只是简单的 GUI,以满足不以 GUI 为中心的小型跨平台开源项目的简单需求。我们所需要的只是一个按钮、一个刻度(又名滑块、又名轨迹栏)和一个文本输入字段。以及未来发展的一些规模选择。所以我们想 - 让我们以任何可能的方式从 Missioncode 项目中强制执行 ASL。

我们首先尝试了一些我们日常使用的现代 Ubuntu 11 和 11 以及 OpenSuse(来自 here 的 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 用小部件编译 ASL。小部件完全由任务代码 augthor 创建,因此没有任何保证如果他们工作.. 但我们编译了完整的任务代码主干(也是一个名为missionPhoto 的应用程序)并且应用程序运行良好。

我们尝试使用完整的 ASL 编译我们的代码,但似乎我们在窗口上拥有的 ASL api 在我们在 Windows 上拥有的 ASL 上不起作用......或多或少。=(

不是结束

但仍有希望,亲爱的 SO 用户中的任何一位有丰富经验的人都会看看他们在 MissionCode 和当前 ASL 中拥有的 ASL,并将为我们所有人提供适用于 linux 的 ASL 1.0.43。

【问题讨论】:

  • 正如我在回答中所写,APL 不支持除 Windows 和 MacOS 之外的任何东西(甚至在他们的文档中也有说明)。它没有“后端”代码来支持任何其他 GUI 框架,例如Qt、gtk 等,除了 Windows 和 MacOS(您可以在 $APL_ROOT/windows 和 $APL_ROOT/macintosh 目录中找到它)。在某些旧版本的 adobe 库中情况并非如此,其中的库结构稍有不同,并且它“板载”了额外的后端。您唯一能做的就是为支持 linux 的 GUI 库创建后端代码,例如 Qt 或 gtk(或在某处找到)

标签: c++ linux boost adobe asl


【解决方案1】:


当前版本的 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 行),但我认为这项工作不会太容易了。
无论如何,祝你好运! :)

【讨论】:

  • 你可以看看post update=)关于“任务代码”项目:它对项目没有分离,但对生成的库有分离。
猜你喜欢
  • 1970-01-01
  • 2013-07-13
  • 2010-12-12
  • 2010-11-09
  • 2013-02-09
  • 2021-07-16
  • 1970-01-01
  • 1970-01-01
  • 2010-10-17
相关资源
最近更新 更多