delphi for linux(linux软件仓库)
delphi为什么没落了
原因可以写很多条,我认为主要的有:
1、经营理念迷失
Delphi7成为巅峰之后,经营理念出现了问题,企业迷失,不仅如此,技术受漠视,Delphi之父Anders Hejlsberg受到排挤,而微软大力挖角,Anders Hejlsberg成为了C#之父。
2、技术路线迷失
这也与第1条有关,C/S时代成功,但Web时代Delphi迟迟未见行动。曾经花了很多气力试图进入Linux,可是直到kylix发展到第三版,borland才明白:内置C编译器环境并与之关系紧密的免费OS,没有人愿意花钱去购买一款开发工具为它开发应用。
即使到今天,Delphi的Web的直接开发是IntraWeb,这个东西是收购AtoZ公司的,设计风格就与Borland不同,也并不好用,没见哪个稍正规网站用这个东西开发。
数据库的Web环境,目前是DataSnap技术,这也是到Delphi2010才将Datasnap重构,变得适合Web,动作太慢了。
技术路线迷失还表现在对.net平台上,Borland甚至专门开发了for.net的Delphi产品,而win32上,Delphi已运行得极好,真不知Borland当时是怎么想的。
一直到2010年左右,Delphi才算走到正路上:重构Datasnap技术,全面支持Web,新的Datasnap更易用,并且不再依赖Windows,只要有tcp/ip就可以使用,连Http都不是必需。
另一方面用Delphi XE将移动平台纳入,到XE7之后,移动开发基本成熟好用了。
不过,这已经太晚了,晚了10年。
3、仍然是经营理念的问题
Interbase你听说过吗?其历史与DB2一样悠久,比My SQL和MS SQL Server都早得多,优秀的数据库,但是其市场占有率几乎为零。Interbase为什么没人用?思考这个问题的同时,再回味Delphi的没落,能发现很多相同点。
直到今天,你如果想用Interbase仍然十分困难,需要破解,而Interbase使用得人是如此之少,少得让人没兴趣破解。连彻底免费的Fire Bird都没什么人用。这与当年的Borland公司没有关系?
微软为了推行Win10,提升占有率,全力免费,即使如此,仍然效果不佳,微软的SQL Server收费,但仍然有免费的express,而Borland的行动正好相反。
4、无视对潜在开发大众的培养
Borland当年打击盗版积极,结果有些企业买一套Delphi7,一直到今天仍然只用D7,或者用其它软件开发,对Delphi平台尽量回避。
现在至少在中国,使用Delphi的已极少,组建使用Delphi开发团队的难度就太大了,相比之下,组建Java和C#团队就容易得多。
DelphiforLinux中应用共享对象库
1. Delphi for Linux是Borland公司推出的基于Linux平台的面向对象的可视化开发工具,是目前Linux平台上很好的应用开发工具。Delphi for Linux也称Kylix,开发者用Kylix开发Linux应用程序时,可能会使用到Linux操作系统本身带的大量SO文件。
2. SO是一种特殊的运行文件,包含若干方法、对象和资源。它不能直接运行,但可以被Kylix应用程序或其他可执行文件动态调用。SO文件扩展名为so。编译前源文件扩展名为dpr。本文所举例子均在Red Hat Linux及Kylix环境下调试编译通过,并可正常运行。
3. SO库文件的组成和Kylix标准单元文件的内部结构基本相同,也有声明、实现及初始化部分。区别之一在于SO库只是其他程序可以调用的方法(包括函数及过程)集合。区别之二,库程序以library关键字而非project开头启动其项目文件。库程序包含有exports语句,其列出要向外部提供的导出函数及过程。
4.共享对象库的创建,SO库文件的构成,函数重载,特殊编译指令,采用Delphi for Linux创建SO的编程规则,使用前的Linux系统设置,以及在Delphi for Linux中用隐式或显式链接方法装入和使用SO函数的基本方法,经验及技巧,并对应用SO可能出现的问题进行了探讨和分析。
5.共享对象库基本概念:多个Kylix程序或它的多个单元文件可通过接口共用一个SO库文件;某一个Kylix程序可通过多个接口使用多个SO库文件,这样SO变成一种可共用的资源,实现真正的资源共享,大大缩小了Kylix应用程序的执行代码,增强了软件的可重用性。
6.将SO文件作为Kylix应用程序的公共调用模块设计时,由于其独立于应用程序,软件升级时只需修改SO库文件及编译SO,无需更改及重编译Kylix应用主程序。
7.不仅可使用Kylix编写SO库,还可使用C或C++等常用语言来编写,只要遵循特定的接口规范。
8.共享对象库的使用,Kylix应用程序使用SO库时可以采用两种方式,一种是隐式链接(Implicit linking),也称静态装入;另一种是显式链接(Explicit Linking),也称动态装入。
9.使用前的系统设置,自定义SO库建好后,Kylix应用程序调用时会报错,这是因为Kylix找不到新建库。必须对系统进行相关设置,这与在Delphi for Windows中使用DLL库不同。DLL库建好后只需将编译后的DLL文件放到Delphi主程序目录下即可使用。
10.隐式链接,实现隐式链接并不难,只需在应用程序中加入库函数的声明语句及库的external定义从句,则库函数可以和一般局部函数一样使用。
11.显式链接,显式链接是应用程序在执行过程中可根据实际需要随时加载SO库文件,也可以随时卸载SO库文件,还可在运行时进行SO库的切换,而这些是隐式链接无法做到的。与隐式链接相比,显式链接具有更大的灵活性。
12.在Kylix中,要动态装入库和调用导出函数可以用Delphi仿真代码或自然Linux方法,下面分别介绍这两种方法。
13. SO库中窗体对象的使用,除了包含函数和过程的库之外,还可以将Kylix建立的窗体放在共享对象中,这可以是对话框或其他窗体。
delphixe linux arm 架构如何编译 - 知乎
在编译 Delphixe Linux ARM架构时,vmlinux是通过将各个子目录下的 built-in.o、.a等文件链接在一起形成的。这些文件是如何编译生成的呢?
编译生成 built-in.a文件的过程涉及到 vmlinux-deps变量,其定义了 vmlinux所依赖的文件集合,包括 KBUILD_LDS连接脚本、KBUILD_VMLINUX_OBJS和 KBUILD_VMLINUX_LIBS。
KBUILD_LDS脚本不在此考虑范围内,而 KBUILD_VMLINUX_OBJS和 KBUILD_VMLINUX_LIBS则包含了各个子目录下的 built-in.o和.a文件。
最终,vmlinux-deps的值包含了除 arch/arm/kernel/vmlinux.lds以外的所有要编译链接生成的文件。
顶层 Makefile中的排序函数 sort对 vmlinux-deps的字符串列表进行排序,并去重,生成 vmlinux-dirs变量,此变量保存着生成 vmlinux所需源码文件的目录。
vmlinux-dirs的值包括了多个目录,如 init、usr、arch/arm/vfp等。
顶层 Makefile中的代码指定了编译过程,主要涉及到对 vmlinux-dirs中的目录进行编译和链接。
以"make-f./scripts/Makefile.build obj=init"这个命令为例,讲解详细的运行过程。这里的 Makefile.build脚本默认目标为__build。
在只编译 Linux内核镜像文件时,KBUILD_BUILTIN=1,KBUILD_MODULES为空。
编译过程中,builtin-target依赖于 real-obj-y变量,其值为经过排序和去重后的 subdir-builtin变量。
编译生成 built-in.a文件时,需要确保 obj-y、obj-m、obj-、subdir-m和 lib-target等变量不全为空。
最后,使用if_changed加上参数 cmd_ar_builtin的方式调用命令,将某个目录下的所有.o文件链接在一起,最终形成 built-in.a。