小试fpc交叉编译:从Linux到Win32

原创 2007年10月05日 21:38:00
刚刚小小的试了下,程序是一个简单的dll外加一个 调用它的exe。(需要装上这个才能编译:fpc-crosswin32_2.0.4-060919_i386.deb)这两段简单的程序如下。

app.pas

 1 program app;
2
3 { app use win32lib.dll }
4
5 procedure SaySomething(str:PChar);stdcall;external 'win32lib' name 'SaySomething';
6 function Add(a,b:Integer):Integer;stdcall;external 'win32lib' name 'Add';
7
8 var
9 a,b:Integer;
10 begin
11 SaySomething('Enter 2 integers:');
12 Readln(a,b);
13 Writeln(a,'+',b,'=',Add(a,b));
14 end.

win32lib.pas

 1 library win32lib;
2
3 { demo library for win32 }
4
5 procedure SaySomething(str:PChar);stdcall;
6 begin
7 Writeln(str);
8 end;
9
10 function Add(a,b:Integer):Integer;stdcall;
11 begin
12 Add:=a+b;
13 end;
14
15 exports
16 SaySomething,
17 Add;
18 begin
19 end.

程序没什么好说的,编译的时候带上-Twin32参数就行了。然而,在成功连接成DLL之后,会出现一个错误。这个错误我个人估计100%是bug。
stlxv@stlxvcomputer:~/samples/freepascal/win32_dll$ fpc -Twin32 win32lib.pas 
Free Pascal Compiler version 2.0.4 [2007/02/02] for i386
Copyright (c) 1993-2006 by Florian Klaempfl
Target OS: Win32 for i386
Compiling win32lib.pas
Linking win32lib.dll
/usr/bin/fpc-i386-win32-dlltool: Unable to open object file:
win32lib.pas(19,1) Error: Error while linking
Error: /usr/bin/ppc386 returned an error exitcode (normal if you did not specify a source file to be compiled)
写句出错的话不要紧,要紧的是,整个fpc的返回值不是0。假如在Makefile中,这将导致整个make过程的失败。

对于这个问题,有个仁兄写了个wrapper来解决。也正式这篇文章让我有欲望来写这一篇东西。
 1 { 程序来自:
2 http://www.lazarus.freepascal.org/index.php?name=PNphpBB2&file=viewtopic&p=15839
3 这位兄弟同时把fpc-i386-win32-dlltool改名成fpc-i386-win32-dlltool-orig。
4 }

5 program fpc_i386_win32_dlltool;
6 {$mode objfpc}{$H+}
7 uses
8 Classes, SysUtils, Process;
9 var
10 i: integer;
11 s: ansistring;
12 AProcess: TProcess;
13 begin
14 s:=ParamStr(1);
15 For i:=2 to ParamCount() do
16 s:=s + ' ' + ParamStr(i);
17 WriteLn('wrapping: fpc-i386-win32-dlltool ', s);
18 AProcess:=TProcess.Create(nil);
19 AProcess.CommandLine := 'fpc-i386-win32-dlltool-orig '+ s;
20 AProcess.Options := AProcess.Options + [poWaitOnExit];
21 AProcess.Execute;
22 AProcess.Free;
23 end.
好在shell是强大的。所以这个问题可以很容易地解决。所以,最后的Makefile就成这样了-_-!。为了让这个Makefile见得了人,我重新改了一下,汗死...

Makefile

all: win32

.pas.exe:

fpc -o$@ -Twin32 $^

.pas.dll:

fpc -o$@ -Twin32 $^ || exit 0 # 链接成功后会有一个莫名其妙的错误信息(100%是bug!),汗..

win32:
app.exe win32lib.dll
win32lib.dll: win32lib.pas
app.exe: app.pas

clean:

rm -rf *.dll *.exe *.o *.s *.res *./$/$/$

.PHONY:
win32 clean all
.SUFFIXES: .pas .exe .dll

写这篇文章还有一个好处,至少让我用熟了code2html,同时也知道了在pascal方面pas2html和code2html都不怎么好用(看上面的结果就知道了,一部分经过我的再排版)。汗死...



 

相关文章推荐

在Ubuntu下安装FPC编译器

1. 从http://sourceforge.net/projects/freepascal/files/Linux/下载最新版本的tar包 2. 解压文件 3. 打开终端窗口,进入解压出的文件保...
  • poolord
  • poolord
  • 2010年12月22日 00:54
  • 1414

ubuntu平台,VLC/LibVLC交叉编译,生成win32版本,以及LibVLC增加录像接口

这几天要用LibVLC播放视频,还需要增加一个在播放过程中录制的功能,于是把VLC完整编译了一遍,也添加了录像的接口。 原先是想在windows平台用mingw+msys交叉编译的,不过vlc官网一再...
  • avsuper
  • avsuper
  • 2017年08月02日 18:19
  • 200

cocos2d-x(一) win32交叉编译android项目经验

Hello!大家好,欢迎来到互撸娃的博客。这是我的第一篇博文。今天教大家怎么把2dx的win32项目交叉编译成android项目并最终编译成apk。我会讲的很详细。并注明我遇到的一些错误。我所用的co...

[cocos2d-x 学习] 如何编译自己的项目(从win32交叉编译到android)

前言 学习cocos2d-x,很多人都是从 win32 开发然后直接交叉编译到 android project,而中间过程怎么弄? 如何交叉编译 新建 win32 程序(可以参照这里),...
  • Gitxs
  • Gitxs
  • 2012年11月04日 23:38
  • 5040

Fedora 17下交叉编译vlc-2.0.6-win32小记

关于编译windows下的vlc网上的教程除了翻译N年前wiki官网的那些蚂蚁文之外,可以说基本没啥参考意义和价值。因为那些都是非常老的版本,0.8.x或者1.x.x,而我这个人有喜欢新鲜事儿,所以就...

[cocos2d-x 学习] 第一个cocos2d-x win32程序和NDK交叉编译

第一个cocos2d-x win32程序 打开cocos2d-x工程,(如何打开?上一篇有讲过了,点这里),选择项目解决方案右键->添加->新建项目->选择cocos2d-x win32Appl...
  • Gitxs
  • Gitxs
  • 2012年11月01日 12:58
  • 10881

cocos2d-x win32程序和NDK交叉编译

第一个cocos2d-x win32程序 打开cocos2d-x工程,(如何打开?上一篇有讲过了,点这里),选择项目解决方案右键->添加->新建项目->选择cocos2d-x win32Appl...

ubuntu13.10上交叉编译win32运行的vlc2.0.3总结

最近做交叉编译真是做的死去活来,不过 最后还是成功了,在此总结一下。 一、安装交叉编译环境 1. sudo apt-get install gcc-mingw-w64-i686 g++-m...

Win32Compile---ubuntu 12.04下交叉编译win32 vlc

原文请参考:https://wiki.videolan.org/Win32Compile/http:// configure过程中如果出现error: LibVLC requires mingw-r...

fpc-2.4.0.i386-win32安装程序

  • 2013年07月24日 16:07
  • 34.67MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:小试fpc交叉编译:从Linux到Win32
举报原因:
原因补充:

(最多只允许输入30个字)