非root权限下编译安装几个小游戏

编译打包和其他
回复
头像
YeLee
论坛版主
帖子: 26406
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
联系:

非root权限下编译安装几个小游戏

#1

帖子 YeLee » 2013-02-01 19:37

由于最近电脑出了点问题,所以只能借别人的机子来用一下。不过,那机子上面的游戏却少得可怜,所以就想自己来装几个游戏玩玩。只是,毕竟是别人的机子,所以不敢往系统上装东西,怕把系统给弄坏。而目前该用户可以写入的目录也只有家目录和/mnt/bin,故也只能从这里入手。
第一个要装的游戏是speed-dreams,先去下载几个包:

代码: 全选

axel --user-agent="Mozilla/5.0" "http://jaist.dl.sourceforge.net/project/speed-dreams/2.0.0/speed-dreams-src-base-2.0.0-r4687.tar.xz"
axel --user-agent="Mozilla/5.0" "http://jaist.dl.sourceforge.net/project/speed-dreams/2.0.0/speed-dreams-src-hq-cars-and-tracks-2.0.0-r4687.tar.xz"
axel --user-agent="Mozilla/5.0" "http://jaist.dl.sourceforge.net/project/speed-dreams/2.0.0/speed-dreams-src-more-hq-cars-and-tracks-2.0.0-r4687.tar.xz"
axel --user-agent="Mozilla/5.0" "http://jaist.dl.sourceforge.net/project/speed-dreams/2.0.0/speed-dreams-src-partial-build-patch-2.0.0-r4687.tar.xz"
axel --user-agent="Mozilla/5.0" "http://jaist.dl.sourceforge.net/project/speed-dreams/2.0.0/speed-dreams-src-unmaintained-2.0.0-r4687.tar.xz"
axel --user-agent="Mozilla/5.0" "http://jaist.dl.sourceforge.net/project/speed-dreams/2.0.0/speed-dreams-src-wip-cars-and-tracks-2.0.0-r4687.tar.xz"
下载完毕后检查一下文件的md5,无误后,把文件解压出来:

代码: 全选

mkdir speed-dreams
tar xf speed-dreams-src-base-2.0.0-r4687.tar.xz -C speed-dreams
tar xf speed-dreams-src-hq-cars-and-tracks-2.0.0-r4687.tar.xz -C speed-dreams
tar xf speed-dreams-src-more-hq-cars-and-tracks-2.0.0-r4687.tar.xz -C speed-dreams
tar xf speed-dreams-src-wip-cars-and-tracks-2.0.0-r4687.tar.xz -C speed-dreams
tar xf speed-dreams-src-unmaintained-2.0.0-r4687.tar.xz -C speed-dreams
解压出来后ls一下,不难得知,这项目是用cmake的,创建并进入构建目录

代码: 全选

mkdir speed-dreams/build  && cd speed-dreams/build
然后,运行一次「cmake -D OPTION_OFFICIAL_ONLY:BOOL=ON ..」,等它出错。
第一个错误是plib,跟着,我们需要去下个plib,蛋疼的人会想到去plib的sf项目主页下一个包来,先configure,然后make&&make install。当然,这不失为一个通用的办法,但是,那么多包,还要一个个主页打开,该弄到猴年马月啊?所以,在这里我推荐一个快捷的办法,直接到一些发行版的网站去下。ArchLinux的那边可以弄到很多新包,所以就选这发行版的包吧。
这里搜索一下,不难得知speed-dreams依赖plib、openal和enet这些包,点击进去,然后「Download From Mirror」下载对应的库,解压包里面/usr目录的文件到某个目录里面,我这里选择的是/mnt/bin/lib。解压之后可以看到/mnt/bin/lib里面的目录结构。

代码: 全选

ls /mnt/bin/lib
include lib bin
然后,我们先导出几个变量。在这里要说明的是:这几个变量很重要,下面很多地方要用到。

代码: 全选

export CFLAGS="-O2 -pipe -march=corei7"
export CXXFLAGS="${CFLAGS}"
export PATH=$PATH:/mnt/bin/lib/bin
export LIBRARY_PATH=/mnt/bin/lib/lib
export LD_LIBRARY_PATH=/mnt/bin/lib/lib
export CPLUS_INCLUDE_PATH=/mnt/bin/lib/include
然后运行「ccmake ..」按下[t]开启高级模式,进去修改一些变量:
CMAKE_BUILD_TYPE设置为Release
CMAKE_INSTALL_PREFIX设置为目标的安装目录,我这里设置为/mnt/bin/speed-dreams
ENET_INCLUDE_DIR设置为/mnt/bin/lib/include
ENET_LIBRARYE设置为/mnt/bin/lib/lib
OPENAL_INCLUDE_DIR设置为/mnt/bin/lib/include
OPENAL_LIBRARY设置为/mnt/bin/lib/lib
OPTION_DEBUG设置为OFF
PLIB_INCLUDE_DIR设置为/mnt/bin/lib/include
PLIB_JS_LIBRARY设置为/mnt/bin/lib/lib/libplibjs.a
PLIB_SG_LIBRARY设置为/mnt/bin/lib/lib/libplibsg.a
PLIB_SL_LIBRARY设置为/mnt/bin/lib/lib/libplibsl.a
PLIB_SSGAUX_LIBRARY设置为/mnt/bin/lib/lib/libplibssgaux.a
PLIB_SSG_LIBRARY设置为/mnt/bin/lib/lib/libplibssg.a
PLIB_UL_LIBRARY设置为/mnt/bin/lib/lib/libplibul.a
SD_BINDIR设置为bin
SD_DATADIR设置为data
最后那几个plib的库的规律看到没?只是「.a」前面几个字符不同而已。
设置完毕后,按一下[c],无误后再按一下[g],过程中的WARNING直接忽略即可。
退出ccmake后,可以看到当前目录已经生成了一个Makefile文件。接下来「make -j4」编译即可。不过,这里要说明的是,参数j后面最好是跟cpu的核心数,这个为什么,鉴于不在本文范围内,我就不解释了。
可能有人会比较喜欢命令行的cmake,当然,也可以使用「cmake .. -DCMAKE_INSTALL_PREFIX=/mnt/bin/speed-dreams」的方式,这不过是个人爱好罢了。
make一会后,会发现编译出错了,什么「../../modules/networking/libnetworking.so: undefined reference to `enet_packet_destroy'」之类的东西,根据经验,我们不难知道是链接库的时候出现问题了。

代码: 全选

strings /mnt/bin/lib/lib/libenet.so |grep enet_packet_destroy
我们不难看出不是版本的问题,不过是链接的时候出现问题而已。
再「ccmake ..」进去一次把CMAKE_EXE_LINKER_FLAGS设置为-lenet即可。
编译完毕之后,make install弄到目标文件夹吧。
安装之后,我们还是清理一下。include和share/man这些目录就删掉吧,毕竟我们只是玩游戏。
不过,毕竟这游戏的库还是不全的,所以,我们还需要把运行需要的一些库拷贝过去。

代码: 全选

export LD_LIBRARY_PATH=/mnt/bin/speed-dreams/libs
ldd /mnt/bin/speed-dreams/bin/speed-dreams-2 |grep not
libenet.so.2
我们不难知道还缺一个libenet.so.2
cp -H /mnt/bin/lib/lib/libenet.so.2 /mnt/bin/speed-dreams/libs/
然后,我们再弄个脚本启动这游戏:
[bash]
#!/bin/bash
export LD_LIBRARY_PATH=/mnt/bin/speed-dreams/libs
/mnt/bin/speed-dreams/bin/speed-dreams-2
[/bash]

第二个要装的游戏是0ad,目前在下载页面可以获取的最新版本的是alpha12,那边提供了tar.xz和tar.gz的压缩包,下哪个,随便你。
下载完毕之后,检查一下md5,无误后,我们把unix-build和unix-data两个包解压好。
至于文件的md5,我们可以在Arch的PKGBUILD里面查到。
开始编译之前,我们先进入源码目录,打个补丁。
[bash]
>>>cat boost-mt-fix.patch
--- build/premake/extern_libs4.lua.old 2013-02-01 20:25:44.164849297 +0800
+++ build/premake/extern_libs4.lua 2013-02-01 20:27:17.689878313 +0800
@@ -218,7 +218,7 @@
-- The following are not strictly link dependencies on all systems, but
-- are included for compatibility with different versions of Boost
android_names = { "boost_filesystem-gcc-mt", "boost_system-gcc-mt" },
- unix_names = { "boost_filesystem-mt", "boost_system-mt" },
+ unix_names = { "boost_filesystem", "boost_system" },
bsd_names = { "boost_filesystem", "boost_system" },
})
end,
@@ -232,7 +232,7 @@
link_settings = function()
add_default_links({
android_names = { "boost_signals-gcc-mt" },
- unix_names = { "boost_signals-mt" },
+ unix_names = { "boost_signals" },
bsd_names = { "boost_signals" },
})
end,

>>>patch -p0 <boost-mt-fix.patch
[/bash]
跟着,再去Arch那边下过来一些要用到的包,boost和wxgtk什么的在0ad的依赖那边都能看到,直接下过来即可。解压过去后,库里面的一些东西可能还需要修改一下。
/mnt/bin/lib/bin/wx-config重新链接为/mnt/bin/lib/lib/wx/config/gtk2-unicode-release-2.8
/mnt/bin/lib/include/wx-2.8/wx链接到/mnt/bin/lib/include/wx
/mnt/bin/lib/lib/wx/include/gtk2-unicode-release-2.8/wx/setup.h也链接到/mnt/bin/lib/include/wx/setup.h
导出上面的CPLUS_INCLUDE_PATH等一大堆变量后,进入源码的build/workspaces目录下面,运行./update-workspaces.sh -j4,等待准备完毕。
准备完毕之后,就可以用make做事情了。
编译完毕后,直接把源码binaries目录下面的data和system两个文件夹拷贝到/mnt/bin/0ad下面即可。只是我不明白的是,编译时候,明明说好了是release的,但编译出来的文件体积还是很大,所以,我们需要进入/mnt/bin/0ad/system目录运行一次「strip *」才行。
跟着,又到了缺库补库的阶段了,这点上面我们已经说过了,在此也就不重复了。我想,运行一次ldd * 2>/dev/null |grep not分析结果也很容易上手吧。
最后,弄一个脚本,运行system目录下面的pyrogenesis即可。

第三个要弄的游戏是vdrift,先把这东西下载过来。
下载完后,解压一看,你会发现这货的项目管理工具非常奇葩,居然是SCons,先去 scons.org下一个东西过来,然后我们再弄一个脚本scons并添加到/mnt/bin/lib/bin里面:
[bash]
#!/bin/bash
PYTHONPATH=$PYTHONPATH:/mnt/bin/scons/engine
python2 /mnt/bin/scons/scons "$@"
[/bash]
跟着,导出前面的CPLUS_INCLUDE_PATH等一大堆变量,然后,进入源码目录输入scons开始工作。
很好,出错了,说是pkg-config错误,说是找不到bullet这库,我们去Arch那边先下个bullet过来,解压过去。
完毕后,运行下面的命令准备。

代码: 全选

sed -i '1s/\(prefix=\)\/usr/\1\/mnt\/bin\/lib/g' /mnt/bin/lib/lib/pkgconfig/bullet.pc
export PKG_CONFIG_PATH=/mnt/bin/lib/lib/pkgconfig
跟着,再运行一次scons,看得出SDL/SDL_image.h是找不到的,天啊,我们明明是下了过来的,还放在了/mnt/bin/lib/include/SDL/SDL_image.h下面的,难道是这奇葩眼瞎了不成?
其实,对于这种问题,我们可以直接绕过项目管理工具,直接去编译。怎么弄?打下面的补丁即可。
[bash]
>>>cat scons-pass.patch
--- SConstruct.bak 2013-02-01 11:22:22.631434777 +0800
+++ SConstruct 2013-02-01 11:27:39.595632717 +0800
@@ -6,17 +6,17 @@
#---------------#
opts = Variables('vdrift.conf', ARGUMENTS)
opts.Add('destdir', 'Staging area to install VDrift to. Useful for packagers. ', '')
-opts.Add('arch', 'Target architecture to compile vdrift for (x86, 686, p4, axp, a64, prescott, nocona, core2)', 'x86')
+opts.Add('arch', 'Target architecture to compile vdrift for (x86, 686, p4, axp, a64, prescott, nocona, core2)', 'a64')
opts.Add(BoolVariable('minimal', 'Only install minimal data (3 cars and 2 tracks)', 0))
opts.Add(BoolVariable('cache', 'Cache options in vdrift.conf', 1))
-opts.Add(BoolVariable('release', 'Turn off debug option during build', 0))
+opts.Add(BoolVariable('release', 'Turn off debug option during build', 1))
opts.Add(BoolVariable('use_apbuild', 'Set this to 1 if you want to compile with apgcc to create an autopackage', 0))
opts.Add(BoolVariable('use_binreloc', 'Set this to 1 if you want to compile with Binary Relocation support', 1))
opts.Add(BoolVariable('os_cc', 'Set this to 1 if you want to use the operating system\'s C compiler environment variable.', 0))
opts.Add(BoolVariable('os_cxx', 'Set this to 1 if you want to use the operating system\'s C++ compiler environment variable.', 0))
opts.Add(BoolVariable('os_cxxflags', 'Set this to 1 if you want to use the operating system\'s C++ compiler flags environment variable.', 0))
opts.Add(BoolVariable('use_distcc', 'Set this to 1 to enable distributed compilation', 0))
-opts.Add(BoolVariable('force_feedback', 'Enable force-feedback support', 0))
+opts.Add(BoolVariable('force_feedback', 'Enable force-feedback support', 1))
opts.Add(BoolVariable('profiling', 'Turn on profiling output', 0))
opts.Add(BoolVariable('efficiency', 'Turn on compile-time efficiency warnings', 0))
opts.Add(BoolVariable('verbose', 'Show verbose compiling output', 1))
@@ -27,8 +27,8 @@
# define a list of CPPDEFINES so they don't get mangled...
cppdefines = []
default_settingsdir = ".vdrift"
-default_prefix = "/usr/local"
-default_datadir = "share/games/vdrift/data"
+default_prefix = "/mnt/bin/vdrift"
+default_datadir = "data"
default_bindir = "bin"

#---------------#
@@ -144,8 +144,8 @@
env['CXXFLAGS'] += SCons.Util.CLVar(os.environ['CXXFLAGS'])
if os.environ.has_key('LDFLAGS'):
env['LINKFLAGS'] += SCons.Util.CLVar(os.environ['LDFLAGS'])
- check_headers = ['GL/gl.h', 'GL/glu.h', 'SDL/SDL.h', 'SDL/SDL_image.h', 'SDL/SDL_rotozoom.h', 'vorbis/vorbisfile.h', 'GL/glew.h', 'curl/curl.h', 'bullet/btBulletCollisionCommon.h', 'archive.h']
- check_libs = [ ['GLEW', 'GL/glew.h', 'glDeleteSamplers(0, NULL);', 'Your GLEW library is out of date.'] ]
+ check_headers = []
+ check_libs = []

if ARGUMENTS.get('verbose') != "1":
env['ARCOMSTR'] = "\tARCH $TARGET"
>>>patch -p0 <scons-pass.patch
[/bash]
不过,这货编译的时候,貌似还要运行一次svnversion获取版本号,我们可以自己弄一个svnversion绕过去,直接显示几个字符的脚本大家会写了吧,这个就不说了。
再scons一下,再次失败,说是SDLK相关的一大堆变量还没有声明,这时候,我们需要打一个叫vdrift-2012-07-22c_bullet281_patch.diff的补丁。
打完补丁之后,再运行一次scons,总算是成功编译了。
然后,运行scons install安装过去即可,至于最后一步的缺库补库,就不说了。

至此,三个游戏也弄过来了,接下来,好好享受游戏吧,折腾就到此结束了,毕竟妹子和游戏才是头等大事。 :em11 :em11 :em11
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

Re: 非root权限下编译安装几个小游戏

#2

帖子 枫叶饭团 » 2013-02-01 19:51

次奥,膜拜大大,一句都没看懂 :em06
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

Re: 非root权限下编译安装几个小游戏

#3

帖子 枫叶饭团 » 2013-02-01 19:52

另外,别把游戏和妹子并相提并论。。。会死得很惨的 :em19
jtshs256
帖子: 22323
注册时间: 2010-07-19 21:41
系统: OS X

Re: 非root权限下编译安装几个小游戏

#4

帖子 jtshs256 » 2013-02-01 20:08

看来轮子最近真的很闲……
-march=corei7
啧啧……
躺平
头像
YeLee
论坛版主
帖子: 26406
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
联系:

Re: 非root权限下编译安装几个小游戏

#5

帖子 YeLee » 2013-02-02 9:01

目测,二楼的伤疤还没有愈合。只是,你难道没看清妹子和游戏的次序吗? :em04 :em04 :em04
也对,糕富帅怎么知道没见过世面的吊死用上高端U的鸡冻心情。 :em01 :em01 :em01
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
头像
luojie-dune
帖子: 22033
注册时间: 2007-07-30 18:28
系统: Linux
来自: 空气中

Re: 非root权限下编译安装几个小游戏

#6

帖子 luojie-dune » 2013-02-02 9:07

/me 几乎没想妹子。
『这个世界都是我的 ,我爱你们』

ENTP ⥂ INTP ⥄ INFP ⇦ INTJ

在此发布的文章使用 Creative Commons Attribution-ShareAlike 4.0 协议
头像
YeLee
论坛版主
帖子: 26406
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
联系:

Re: 非root权限下编译安装几个小游戏

#7

帖子 YeLee » 2013-02-02 9:12

ld这种时刻美人在怀的,就不解释了。 :em01 :em01 :em01
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
头像
VampirEM木法沙
帖子: 151
注册时间: 2013-10-29 19:36
系统: ubuntu12.04

Re: 非root权限下编译安装几个小游戏

#8

帖子 VampirEM木法沙 » 2014-03-18 13:28

膜拜轮大!
在地狱中仰望天堂!
三十年河东,三十年河西,莫欺少年穷!
别在可以吃苦的时候贪图安逸!
头像
qy117121
论坛版主
帖子: 50530
注册时间: 2007-12-14 13:40
系统: Winbuntu
来自: 志虚国乌由市
联系:

Re: 非root权限下编译安装几个小游戏

#9

帖子 qy117121 » 2014-03-18 15:18

轮子好高端,一句都没看懂

来自 紫萌冰 的小叽叽~(*+﹏+*)~
渠月 · QY   
本人只会灌水,不负责回答问题
无聊可以点一下→ http://u.nu/ubuntu

Ubuntu 20.04 快速设置指南,请配合浏浏览器自动翻译使用

邮箱 chuan@ubuntu.org.cn
jinjiachen
帖子: 2148
注册时间: 2012-12-16 15:43
系统: debian

Re: 非root权限下编译安装几个小游戏

#10

帖子 jinjiachen » 2014-03-18 15:55

一直以为轮子语言功底牛B,原来是工科男 :em05
头像
YeLee
论坛版主
帖子: 26406
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
联系:

Re: 非root权限下编译安装几个小游戏

#11

帖子 YeLee » 2014-03-18 18:11

楼上这话什么意思来着,本王可是文科男。 :em01
另,坟还是少点挖才好。
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
头像
VampirEM木法沙
帖子: 151
注册时间: 2013-10-29 19:36
系统: ubuntu12.04

Re: 非root权限下编译安装几个小游戏

#12

帖子 VampirEM木法沙 » 2014-03-18 19:16

jinjiachen 写了:一直以为轮子语言功底牛B,原来是工科男 :em05
工科男的文学功底也很好的好吧~
在地狱中仰望天堂!
三十年河东,三十年河西,莫欺少年穷!
别在可以吃苦的时候贪图安逸!
头像
VampirEM木法沙
帖子: 151
注册时间: 2013-10-29 19:36
系统: ubuntu12.04

Re: 非root权限下编译安装几个小游戏

#13

帖子 VampirEM木法沙 » 2014-03-18 19:17

jinjiachen 写了:一直以为轮子语言功底牛B,原来是工科男 :em05
工科男的文学功底也很好的好吧~
在地狱中仰望天堂!
三十年河东,三十年河西,莫欺少年穷!
别在可以吃苦的时候贪图安逸!
头像
VampirEM木法沙
帖子: 151
注册时间: 2013-10-29 19:36
系统: ubuntu12.04

Re: 非root权限下编译安装几个小游戏

#14

帖子 VampirEM木法沙 » 2014-03-18 19:19

jinjiachen 写了:一直以为轮子语言功底牛B,原来是工科男 :em05
工科男的文学功底也很好的好吧~
在地狱中仰望天堂!
三十年河东,三十年河西,莫欺少年穷!
别在可以吃苦的时候贪图安逸!
头像
highwind
帖子: 1362
注册时间: 2008-09-05 23:31
系统: LinuxMint17

Re: 非root权限下编译安装几个小游戏

#15

帖子 highwind » 2014-07-15 9:29

那要是想编译个桌面环境,比如xfce什么的这样也行?
回复