作者:许自强,版权所有,许可转载,请保留作者信息

操作系统:Windows 7 64位专业版

第一部分:准备mingw32 binutils跨平台编译工具

01、安装Fedora Workstation 64位版,建议使用虚拟机

02、安装完成后以root用户登录,下载binutils源代码和mkbinutils

binutils是mingw32项目中的跨平台编译工具,我使用的是版本

mkbinutils是freepascal项目中为编译binutils而制作的脚本,

将mkbinutils设置为允许运行:chmod +x mkbinutils

注意:binutils源代码和mkbinutils脚本需要放在同一目录,然后将binutils源代码解压

03、以root用户登录,并在Fedora系统中安装需要的库

yum install gcc

yum install mingw32-binutils mingw32-gcc mingw32-gmp mingw32-mpfr

yum install mingw64-binutils mingw64-gcc mingw64-gmp mingw64-mpfr

上面是安装32位版和64位版的mingw库

04、为编译创建需要的文件符号

ln -s /usr/bin/i686-w64-mingw32-ar /usr/bin/i386-pc-mingw32-ar

ln -s /usr/bin/x86_64-w64-mingw32-ar /usr/bin/x86_64-pc-mingw32-ar

05、修改mkbinutils脚本,更改以下几行,如果freepascal修改了mkbinutils脚本,则行号可能不准确

第6行,    改为:VER="2.25.1"

第8行,    改为:CC="i686-w64-mingw32-gcc"

第23-26行,改为:TARGETS="i386-linux"

备注:此处可以编译其它平台版本,但我只需要linux版本。另外经测试,在第二部分中编译darwin(即MacOS)版需要i386-darwin-clang.exe文件,我不知道如何获得这个文件,我对MacOS一无所知且时间有限,没有继续深究,如果有哪位朋友知道如何编译darwin版本,请不吝指点

06、执行mkbinutils脚本,等待编译完成

07、修改mkbinutils脚本,更改以下几行(为了编译64位版)

第8行, 改为:CC="x86_64-w64-mingw32-gcc"

第23行,改为:TARGETS="x86_64-linux"

第48行,更改host参数为:--host=x86_64-pc-mingw32

08、执行mkbinutils脚本,等待编译完成

待编译完成后,在/tmp/目录下找到以binutils开头的文件夹,就是已经编译完成的交叉编译工具,将它们复制出来备用

第二部分:获取lazarus和fpc的源代码并进行交叉编译

01、下载lazarus和fpc的源代码,因为当前的正式版2.6.x无法编译成功,

因此使用主干上的源代码进行编译,当前的revision分别是50550和32557

svn co -r 50550  c:\lazsvn_50550

svn co -r 32557  c:\fpcsvn_32557

如果下载中途断线,可以通过svn update -r 来继续下载

02、导出lazarus和fpc源代码的非受管版本,用于编译

svn export c:\lazsvn_50550 c:\lazarus

svn export c:\fpcsvn_32557 c:\lazarus\fpc

03、下载并安装fpc 3.0.0-i386-win32作为编译fpc的工具,安装位置c:\fpc\3.0.0

04、建立交叉编译工具及库目录,拷贝交叉编译工具到相应的目录

mkdir c:\lazarus\cross\bin\i386-linux

mkdir c:\lazarus\cross\lib\i386-linux

mkdir c:\lazarus\cross\bin\x86_64-linux

mkdir c:\lazarus\cross\lib\x86_64-linux

将前面编译的交叉编译工具复制到与平台对应的目录下,注意只需要其中的exe文件,不要其中的目录结构

比如,复制后应该是c:\lazarus\cross\bin\i386-linux\

另外,lib目录是准备用来放置linux库文件的,现在先空着

05、对fpc进行标准编译及安装(i386-win32)

C:\>cd \lazarus\fpc

C:\lazarus\fpc>\fpc\3.0.0\bin\i386-win32\make.exe clean all install INSTALL_PREFIX=c:\lazarus\fpc

06、对fpc进行交叉编译及安装,这一步根据需要的目标平台个数需要多次运行,每次编译一个目标平台文件

首先编译x86_64-win64,编译win64不需要特别指定编译工具

C:\lazarus\fpc>\fpc\3.0.0\bin\i386-win32\make clean crossall crossinstall OS_TARGET=win64 CPU_TARGET=x86_64 INSTALL_PREFIX=c:\lazarus\fpc

然后编译i386-linux,需要指定编译工具

C:\lazarus\fpc>\fpc\3.0.0\bin\i386-win32\make clean crossall crossinstall OS_TARGET=linux CPU_TARGET=i386 CROSSBINDIR=c:\lazarus\cross\bin\i386-linux BINUTILSPREFIX=i386-linux- INSTALL_PREFIX=c:\lazarus\fpc

继续编译x86_64-linux:

C:\lazarus\fpc>\fpc\3.0.0\bin\i386-win32\make clean crossall crossinstall OS_TARGET=linux CPU_TARGET=x86_64 CROSSBINDIR=c:\lazarus\cross\bin\x86_64-linux BINUTILSPREFIX=x86_64-linux- INSTALL_PREFIX=c:\lazarus\fpc

我猜测编译其它平台的命令类似,但是编译darwin失败,提示需要i386-darwin-clang.exe,我不知道如何获得这个文件,而且我对其它平台一无所知,没有深究。

07、生成fpc.cfg并增加配置内容,这一步非常重要,因为接下来编译lazarus需要使用已经编译好的fpc来进行

C:\lazarus\fpc>cd bin\i386-win32

C:\lazarus\fpc\bin\i386-win32>fpcmkcfg.exe -d basepath=c:\lazarus\fpc -o .\fpc.cfg

编辑fpc.cfg并在文件末尾增加以下内容

#cross compile settings for linux

#ifdef linux

#ifdef cpui386

-FDC:\lazarus\cross\bin\i386-linux\

-XPi386-linux-

-Tlinux

-FlC:\lazarus\cross\lib\i386-linux\

-Xr/usr/lib

-FLld-linux.so.2

#endif

#ifdef cpux86_64

-FDC:\lazarus\cross\bin\x86_64-linux\

-XPx86_64-linux-

-Tlinux

-FlC:\lazarus\cross\lib\x86_64-linux\

-Xr/usr/lib64

-FLld-linux-x86-64.so.2

#endif

#endif

08、因为编译后的fpc比安装的稳定版fpc少几个文件,从稳定版fpc中复制缺少的文件,我不清楚这些文件的用途,仅为有备无患

C:\lazarus\fpc\bin\i386-win32>cd \fpc\3.0.0\bin\i386-win32

C:\fpc\3.0.0\bin\i386-win32>for %1 in (*.*) do if not exist c:\lazarus\fpc\bin\i386-win32\%1 copy %1 c:\lazarus\fpc\bin\i386-win32

09、从系统中卸载已安装的fpc 3.0.0,因为接下来需要使用刚才编译的fpc来进行

我在编译过程中发现,如果不卸载掉已安装的fpc,编译过程总是去使用安装的fpc,这会导致编译失败

10、对lazarus做标准编译(i386-win32)

C:\fpc\3.0.0\bin\i386-win32>cd \lazarus

C:\lazarus>fpc\bin\i386-win32\make.exe clean all

11、对lazarus做交叉编译,这一步同样需要根据目标平台个数多次运行,这一步需要32位版的linux系统,如果没有就安装一个

首先编译x86_64-win64,编译win64不需要特别指定编译工具

C:\lazarus>fpc\bin\i386-win32\make.exe all OS_TARGET=win64 CPU_TARGET=x86_64

然后编译i386-linux,因为需要的库文件很多,我没办法逐个列举,需要重复执行这一步骤以得知需要哪些库文件,从32位linux系统中复制到lazarus\cross\lib\i386-linux目录

C:\lazarus>fpc\bin\i386-win32\make all OS_TARGET=linux CPU_TARGET=i386 CROSSBINDIR=c:\lazarus\cross\bin\i386-linux BINUTILSPREFIX=i386-linux- LIBDIR=c:\lazarus\cross\lib\i386-linux OPT="-gl -Xr/usr/lib -FL/lib/ld-linux.so.2 -XLAc=c,dl,gmodule"

继续编译x86_64-linux,需要重复执行这一步骤以得知需要哪些库文件,从64位linux系统中复制到lazarus\cross\lib\x86_64-linux目录

C:\lazarus>fpc\bin\i386-win32\make all OS_TARGET=linux CPU_TARGET=x86_64 CROSSBINDIR=c:\lazarus\cross\bin\x86_64-linux BINUTILSPREFIX=x86_64-linux- LIBDIR=c:\lazarus\cross\lib\x86_64-linux OPT="-gl -Xr/usr/lib64 -FL/usr/lib64/ld-linux-x86-64.so.2 -XLAc=c,dl,gmodule"

linux系统需要安装gcc软件包才能找到这些文件,可以通过whereis和find命令来查找文件位置,大部分文件都位于/usr/lib(或lib64)目录下

如果在编译过程出现提示信息warning: need by ...,需要的文件就是指示的文件名

如果在编译过程出现提示信息cannot find -l,需要的文件是lib.so

有些提示的文件在与目标平台文件名可能有尾缀上的差别,比如提示cannot find -lglib-2.0,我的系统中只有文件libglib-2.0.so.0,将这个文件复制出来并改名

有些文件在linux系统中是ld脚本,如果文件非常小,只有几百个字节,则有可能是ld脚本,可以用cat命令(或Windows下的记事本)查看文件内容,将需要的文件一并复制出来,并修改这个ld脚本,将其中的路径去掉,比如:我的系统上复制来的libc.so,它还需要libc.so.6和libc_nonshared.a这两个文件,libc.so中修改之后的部分内容如下

GROUP ( libc.so.6 libc_nonshared.a  AS_NEEDED ( ld-linux.so.2 ) )

我在编译过程中先编译了32位linux,然后编译64位linux时只需要几个很少的库就编译完了,但是最后真正编译项目时还是提示缺少库文件,所以,还是按照32位linux的文件清单照样复制一份比较省事

12、为lazarus指定配置文件路径

C:\lazarus>echo --primary-config-path=c:\lazarus\config_lazarus > lazarus.cfg

13、启动lazarus,会提示一个错误,然后有一个配置对话框

设定Compiler为:$(LazarusDir)\fpc\bin\i386-win32\fpc.exe

设定FPC sources为:$(LazarusDir)\fpc

14、新建Application,在Project Options中设置Target OS和Target CPU family,现在可以愉快的开始跨平台编译了

15、我写了一个极简单的应用,只包含一个主窗口和一个按钮,点击按钮弹出一条消息,编译之后在各个平台测试,可以如预期的一样顺利运行

提示:32位的linux应用在64位系统中运行需要安装一些支持库,这不是lazarus的问题,我没有测试具体需要什么支持库

16、终于,可以算得上是大功告成,自己庆贺一下,呵呵呵,哈哈哈,:)

参考资料:

下面是我已编译好的跨平台编译工具以及从linux系统中复制出来的库文件,也许能对部分朋友有点帮助,或者做为参考

访问密码 a469

lazarus 编译linux,[原创] 在Windows X64系统制作跨平台Lazarus开发环境相关推荐

  1. Linux系统下搭建java开发环境

    文章目录 安装jdk8 安装maven 安装idea 参考文章 不论在windows系统下,还是在linux系统下,搭建java开发环境的过程基本都是一样的,都要 下载.安装jdk,配置环境变量:JA ...

  2. [原创]在windows下搭建基于apache的SVN环境

    [原创]在windows下搭建基于apache的SVN环境 1 软件下载: 在http://httpd.apache.org/download.cgi,下载: apache_2.2.14-win32- ...

  3. PX4-AutoPilot教程-0-使用VMware虚拟机安装Ubuntu系统并搭建PX4开发环境(ROS+mavros+jMAVSim+gazebo+QGC+QT)

    使用VMware虚拟机安装Ubuntu系统并搭建PX4开发环境 本教程使用VMware虚拟机安装Ubuntu18.04系统(官方推荐使用版本),搭建PX4固件版本为v1.9.2,飞控板为pixhawk ...

  4. 嵌入式Linux(一):东山派壹号 ubuntu开发环境配置

    前言 最近要学嵌入式Linux,网上查了下,被价格吓死了,基本上都是四五百或以上.终于找到了东山派壹号这块板子.主板和底板加起来两百多.本文,主要介绍这块板子 嵌入式linux开发环境的搭建,包括相关 ...

  5. Windows平台上iPhone基于cygwin开发环境的搭建方法

    cygwin 開發平台(windows版 iPhone SDK) http://www.iphonetw.net/books/unofficialdev/cygwintoolchain Windows ...

  6. linux中python解释器的配置_CentOS7配置Python3开发环境

    许多小伙伴在刚接触Unix/Linux操作系统时会非常的不适应,毕竟突然的命令行操作会使习惯于Windows桌面操作的人特别难受,尤其是像笔者这样的手残党,是需要一段时间来适应的. 记得刚刚接触到Un ...

  7. Android之Windows下搭建React Native Android开发环境(差不多搞了一天)

    Android之Windows下搭建React Native Android开发环境               穷逼买不起mac,但是他们都说React Native Android只能在mac下面 ...

  8. 基于Mac OS系统搭建51单片机开发环境

    基于Mac OS系统搭建51单片机开发环境 Reason 本人是杭电计科学生,参加的智能小车队伍平时需要大量基于单片机的操作,目前使用的是MBP(冤种mac),网上大多又是基于Windows系统等开发 ...

  9. 【物体检测快速入门系列 | 03】Windows部署Docker GPU深度学习开发环境

    这是机器未来的第3篇文章 原文首发链接:https://blog.csdn.net/RobotFutures/article/details/124815912 1. 概述 在<物体检测快速入门 ...

最新文章

  1. 保姆式参赛教程全公开,居然还送10万奖金?
  2. Scott Mitchell 的ASP.NET 2.0数据教程之三十九:: 在编辑和插入界面里添加验证控件...
  3. day15-ajax和jquery
  4. at24c16如何划分出多个读写区_读写AT24C02,并用1602显示
  5. 基于matlab的信号合成与分解,基于matlab的信号合成与分解
  6. mysql 5.6.34 二进制下载_linux下安装mysql二进制版本(5.6.34)
  7. 现代软件工程系列 学生的精彩文章 (5) 其实还是人的问题
  8. 实战oracle 12c 处理索引坏块一例
  9. Java Web从前端到后台常用框架介绍
  10. 【刷题】BZOJ 4503 两个串
  11. 从0开始搭建微信小程序(前后端)的全过程
  12. 一键导出所有微信联系人的小工具,搞私域、搞网销客户交接时可能可以用到,【微信通讯录抽水机】
  13. dlib实现人脸对齐方法
  14. 记一次自己亲身经历灵异事件
  15. 系统调用【简单总结】
  16. 分类---逻辑回归(二分类)
  17. iQOO新机发布,vivo开启多品牌之路
  18. flink故障恢复的流程(从检查点恢复状态)
  19. 1000亿!苹果挨欧盟反避税第一刀,下一个是谁?
  20. 【每天一个java设计模式(十八)】 - 观察者模式

热门文章

  1. 年少时的黑客梦实现了吗?
  2. 地理建模——建模方法概述
  3. springboot快速详细配置搭建
  4. 苹果logo设计背后的故事
  5. 前端合成二维码与背景图片,批量导出ZIP下载
  6. 11.15-cpuid
  7. tk.mybatis的条件Example查询
  8. 2021-10-28 JAVA实验三学习总结
  9. 传感器实验——一氧化碳传感器
  10. OpenCV012:双目测距