當前位置:首頁 » 編程軟體 » delphi編譯

delphi編譯

發布時間: 2022-08-27 00:26:12

Ⅰ delphi如何編譯

D7本身就可以直接編譯,為什麼要在cmd模式下編譯呢

Ⅱ 如何使用delphi 編譯rtklib

1. 首先在vs2013中新建一個win32的dll項目

2. 在項目上添加一個文件夾[rtklibsrc]然後在文件夾上【添加現有項目】把rtklib的源文件加入工程。在rtklibsrc下建立rcv把rcv下面的文件也添加到工程

3. 現在開始編譯工程,你會發現很多錯誤。下面我們一步步來解決錯誤。

1> Q: error C1853:
「Debug\rtklibHelper.pch」預編譯頭文件來自編譯器的早期版本,或者預編譯頭為 C++ 而在 C 中使用它(或相反)
x:\xxxx\rtklibhelper\rtklibsrc\tle.c 1 1 rtklibHelper
A: 不使用預編譯頭

2> Q: 錯誤 1 error C4996: 'strncpy': This function or
variable may be unsafe. Consider using strncpy_s instead. To disable
deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for
details. x:\xxxx\rtklibhelper\rtklibhelper\rtklibsrc\tle.c

A: 其實提示上面已經告訴你方法了,需要你加入預編譯指令來取消這個錯誤[_CRT_SECURE_NO_WARNINGS]

3> Q: error C4996: 'gethostbyname': Use getaddrinfo() or
GetAddrInfoW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to
disable deprecated API warnings
x:\xxxx\rtklibhelper\rtklibsrc\stream.c

A: 這個錯誤和上面類似,加入[_WINSOCK_DEPRECATED_NO_WARNINGS ]

4> Q:接下來是一個這樣的錯誤 error C2466: 不能分配常量大小為 0 的數組 x:\xxxx\rtklibhelper\rtklibsrc\rinex.c

A:這個錯誤我們來看一下, 在[MAXPRNGLO]上面按F12,看他的定義處

這個常量為0,那麼不能進行編譯,我們想上面一樣在預編譯器裡面加入 ENAGLO

5> Q: error C1083: 無法打開包括文件: 「rtklib.h」: No such file or
directory x:\xxxx\rtklibhelper\rtklibsrc\rcv\ublox.c 41 1
rtklibHelper

A: 添加附加目錄設置[.\rtklibsrc] , 注意是C/C++的常規下面,不是鏈接器的常規頁面。

6> Q: error LNK2005: _input_oem3 已經在 novatel.obj 中定義 x:\xxxx\rtklibhelper\novatel_old.obj rtklibHelper

A: 這個錯誤是添加文件的時候添加重復了novatel_old.c不應該添加了,刪除即可

7>: Q: error LNK2019: 無法解析的外部符號 _settspan,該符號在函數 _postpos 中被引用 x:\xxxx\rtklibhelper\postpos.obj rtklibHelper

error LNK2019: 無法解析的外部符號 __imp__timeGetTime@0,該符號在函數
_tickget 中被引用 x:\xxxx\rtklibhelper\rtkcmn.obj rtklibHelper

error LNK2019: 無法解析的外部符號 __imp__accept@12,該符號在函數
_accept_nb 中被引用 x:\xxxx\rtklibhelper\stream.obj rtklibHelper

A: 添加附加庫[連接器->輸入->附加依賴庫]添加winmm.lib, ws2_32.lib

8>:Q: error LNK2019: 無法解析的外部符號 _showmsg,該符號在函數 _convrnx 中被引用 x:\xxxx\rtklibhelper\convrnx.obj rtklibHelper

A: 一查showmsg這個函數如果在DLL中需要自己定義,rtklib裡面已經做好了處理需要在預處理器裡面加入[DLL]即可。

預處理器裡面我們添加了

_CRT_SECURE_NO_WARNINGS
_WINSOCK_DEPRECATED_NO_WARNINGS
ENAGLO
DLL

最後rtklibHelper編譯成功了,可以開始編寫具體的功能函數了。

Ⅲ 如何在命令行上編譯我的delphi項目

Borland出品的Delphi,有著閃電般的編譯速度,但是在界面控制項使用較多、工程項目較大的時候,編譯一個工程仍需要一段時間,打開龐大的Delphi IDE,也需要時間。其實,在一個工程開發結束,調試完成之後的Release編譯,完全可以用命令行來執行,因為Delphi的編譯器參數不像C++編譯器那樣復雜。

筆者把Delphi聯機手冊中關於命令行編譯(command-line compiler)的幾篇主題作了翻譯,希望對Delphi開發人員有幫助。

目錄
1. Command-line compiler
命令行編譯器
2. Command-line compiler options
命令行編譯器選項
3. Compiler directive options
編譯器指令選項
4. Compiler mode options
編譯模式選項
5. DCC32.CFG file
編譯器配置文件DCC32.CFG
6. Debug options
調試選項
7. Directory options
目錄選項
8. IDE command-line options
IDE命令行選項
9. Generated files
幾個IDE自動生成的文件介紹

Command-line compiler
命令行編譯器
Delphi's command-line compiler (dcc32.EXE) lets you invoke all the functions of the IDE compiler (DELPHI32.EXE) from the DOS command line (see IDE command-line options. Run the command-line compiler from the DOS prompt using the syntax:
Delphi』s命令行編譯器(dcc32.exe)允許你從DOS命令行方式(參照:IDE命令行選項)實現IDE編譯器(delphi32.exe)的所有功能。用DOS命令運行命令行編譯器語法如下:
dcc32 [options] filename [options]
dcc32 [選項] [文件名] [選項]
where options are zero or more parameters that provide information to the compiler and filename is the name of the source file to compile. If you type dcc32 alone, it displays a help screen of command-line options and syntax.
零或多個參數給編譯器提供信息,文件名指定需要編譯的源文件名。如果你單獨輸入dcc32,它會顯示一個關於命令行編譯的選項和語法的屏幕。
If filename does not have an extension, the command-line compiler assumes .dpr, then .pas, if no .dpr is found. If the file you're compiling to doesn't have an extension, you must append a period (.) to the end of the filename.
如果文件名沒有擴展名,命令行編譯器會查找擴展名為.dpr的同名文件,如果找不到,則查找擴展名為.pas的同名文件。如果你的源文件確實沒有擴展名,你需要在文件名的末尾添加(.)。
If the source text contained in filename is a program, the compiler creates an executable file named filename.EXE. If filename contains a library, the compiler creates a file named filename.DLL. If filename contains a package, the compiler creates a file named filename.BPL. If filename contains a unit, the compiler creates a unit file named filename.dcu.
如果指定的源文件是一個工程文件,編譯器會創建一個擴展名為.EXE的同名可執行文件。如果指定的源文件是一個庫文件,編譯器創建一個擴展名為.DLL的同名動態鏈接庫文件。如果指定的源文件是一個包文件,編譯器會創建一個擴展名為.BPL的同名包。如果指定的源文件是一個單元文件,編譯器會創建一個擴展名為.dcu的目標代碼文件。
You can specify a number of options for the command-line compiler. An option consists of a slash (/) or immediately followed by an option letter. In some cases, the option letter is followed by additional information, such as a number, a symbol, or a directory name. Options can be given in any order and can come before or after the file name.
你可以為命令行編譯器指定多個參數。一個參數包含一個破折號「-」(或「/」)和緊跟著的一個選項字元構成。通常情況下,選項字元後面會跟一些附加的信息,如一個數字、一個符號、一個目錄等。選項可以是任意順序並且可以在源文件名前面或後面。

Command-line compiler options
命令行編譯選項
The IDE lets you set various options through the menus; the command-line compiler gives you access to these options using the slash (/) delimiter. You can also precede options with a hyphen (-) instead of a slash (/), but those options that start with a hyphen must be separated by blanks. For example, the following two command lines are equivalent and legal:
IDE允許你使用菜單來設置各種編譯選項,而命令行編譯器允許你使用字元「/」作為分隔符來設定這些編譯選項。你也可以使用連字元「-」來代替「/」,但是用「-」引出的參數之間必須用空格隔開。例如,下面兩個命令都是等同的也是合法的:
DCC -IC:/DELPHI -DDEBUG SORTNAME -$R- -$U+
DCC /IC:/DELPHI/DDEBUG SORTNAME /$R-/$U+
The first command line uses hyphens with at least one blank separating options. The second uses slashes and no separation is needed.
第一個編譯命令用「-」引出參數,且參數之間有多個空格分隔。第二個編譯命令用「/」引出參數,參數之間不必要分隔。
The following table lists the command-line options. In addition to the listed options, all single-letter compiler directives can be specified on the command line, as described in Compiler directive options.
下列表中列出所有的命令行參數。在附加的選項列表中,所有的單字元編譯器指令都可以在命令行編譯中使用,詳情請參照:編譯器指令。
Option Description
選項 描述
Aunit=alias 設置單元別名
B 編譯所有單元
CC 編譯控制台程序
CG 編譯圖形界面程序
Ddefines 編譯條件符號定義
Epath 可執行文件輸出路徑
Foffset 查找運行期間錯誤
GD 生成完整.Map文件
GP 生成.Map文件Public段
GS 生成.Map文件Segment段
H 輸出提示信息
Ipaths 文件包含路徑
J 生成.Obj目標文件
JP 生成C++類型.Obj目標文件
Kaddress Set image base address
LEpath 包.BPL文件輸出路徑
LNpath .dcp文件輸出路徑
LUpackage 使用運行期間包列表
M 編譯有改動的源文件
Npath dcu/dpu文件輸出目錄
Opaths .Obj文件(匯編目標代碼文件)路徑
P 按8.3格式文件名查找
Q 安靜模式
Rpaths 資源文件(.RES)路徑
TXext 目標文件擴展名
Upaths 單元文件路徑
V 為Turbo Debugger生成調試信息文件
VN 以.Giant格式生成包含命名空間的調試信息文件(將用於C++Builder)
VR 生成調試信息文件.rsm
W 輸出警告信息
Z Disable implicit compilation
$directive Compiler directives
--Help 顯示編譯選項的幫助。同樣的,如果你在命令行單獨輸入dcc32,也會顯示編譯選項的幫助。
--version 顯示產品名稱和版本

Compiler directive options
編譯器指令選項
Delphi supports the compiler directives described in Compiler directives. The $ and D command-line options allow you to change the default states of most compiler directives. Using $ and D on the command line is equivalent to inserting the corresponding compiler directive at the beginning of each source file compiled.
Delphi支持用編譯器指令關鍵字描述的編譯器指令。使用「$」和「D」命令行選項可以改變所有的默認編譯器狀態。用「$」和「D」命令行選項等同於在源文件的前面添加編譯器指令。
Switch directive option
編譯器指令選項開關
The $ option lets you change the default state of all of the switch directives. The syntax of a switch directive option is $ followed by the directive letter, followed by a plus (+) or a minus (-). For example:
「$」允許你改變每一種編譯器指令默認狀態。編譯器指令的語法是「$」後緊跟一個指令字元,再跟一個「-」或「+」。例如:
dcc32 MYSTUFF -$R-
compiles MYSTUFF.pas with range-checking turned off, while:
不使用邊界檢查編譯MYSTUFF.pas單元:
dcc32 MYSTUFF -$R+
compiles it with range checking turned on. Note that if a {$R+} or {$R-} compiler directive appears in the source text, it overrides the -$R command-line option.
使用界面檢查編譯MYSTUFF.pas單元。如果將編譯器指令{$R+}或{$R-}添加到源文件的開始,它將覆蓋從命令行傳入的參數。
You can repeat the -$ option in order to specify multiple compiler directives:
你可以用多個「$」來指定多個編譯器指令,如:
dcc32 MYSTUFF -$R--$I--$V--$U+
Alternately, the command-line compiler lets you write a list of directives (except for $M), separated by commas:
命令行編譯器允許作用逗號分隔的編譯器指定列表,如:
dcc32 MYSTUFF -$R-,I-,V-,U+
只需要用一個「$」符號。
Only one dollar sign ($) is needed.
注意,因為$M的格式不一樣,你不能在逗號分隔的指令列表中使用$M
Note that, because of its format, you cannot use the $M directive in a list of directives separated by commas.
Conditional defines option
條件編譯選項
The -D option lets you define conditional symbols, corresponding to the {$DEFINE symbol} compiler directive. The -D option must be followed by one or more conditional symbols separated by semicolons (;). For example, the following command line:
「-D」選項允許你定義一個編譯條件,符合你用{$DEFINE symbol}定義的編譯器指令。「-D」選項後必須跟隨一或多個用分號分隔的編譯條件符號,如下命令:
dcc32 MYSTUFF -DIOCHECK;DEBUG;LIST
defines three conditional symbols, iocheck, debug, and list, for the compilation of MYSTUFF.pas. This is equivalent to inserting:
定義了三個編譯條件符號:IOCHECK,DEBUG,LIST,用於MYSTUFF.pas單元中。這等同於在源文件中插入以下語句:
{$DEFINE IOCHECK}
{$DEFINE DEBUG}
{$DEFINE LIST}
如果你指定了多個「-D」選項,你可以聯接它們,如下:
dcc32 MYSTUFF -DIOCHECK-DDEBUG-DLIST
等同於第一個例子。
編譯模式選項
有幾個選項能影響編譯器自身的功能。像其它選項一個,你可以使用「/」或「-」的格式。別忘了用至少一個空格分隔這些選項。
選項(-M)
命令行編譯器使用構造邏輯的方式來維護工程。「-M」選項指示編譯器檢查所有與編譯文件相關聯的文件。用這個參數會導致編譯時間增大。
一個源文件在下列情況下會重新編譯:
The source file for that unit has been modified since the unit file was created.
源文件被創建以來被修改過;
用「$I」指令包含的任何文件,用「$L」包含的任何.Obj文件,或用「$R」關聯的任何資源文件.Res,比源文件中的要新;
單元介面部分interface的uses段有改動。
在單元編譯時指令「-Z」在構造邏輯期不被接受。
If you were applying this option to the previous example, the command would be:
如果你在上一個例子中使用這個指令,編譯命令就應該是:
dcc32 MYSTUFF -M
編譯所有 選項(-B)
用於取代要知道哪些單元需要更新-M的選項,你可以使用-B選項來更新所有你的程序中關聯的單元。你不能在程序中同時使用-M和-B。選項-B比-M速度更慢,而且它並不是必需的。
如果你在前一個例子中使用這個參數,編譯命令就應該是:
dcc32 MYSTUFF -B
查找錯誤 選項(-F)
當一個程序由於運行期間錯誤而終止時,它會顯示一個錯誤號和錯誤地址在錯誤發生時。用-Faddress選項來指定錯誤地址,你在源文件中能找到引發錯誤的位置,如果你的程序和單元編譯時附加了調試信息(使用$D編譯器指令)。
為了命令行編譯器能用-F選項查找運行期間錯誤,你必須傳遞與第一次編譯時相同的指令列表。
先前提到過,你的程序和單元必須啟用調試信息,命令行編譯器才能查找運行期間錯誤。默認情況下,所有的程序和單都是啟用調試信息的,除非你用{-D}或-$D-指令關閉它,這樣,命令行編譯器就不能查找運行期間錯誤了。
使用包(-LU)選項
使用-LU選項來在編譯時添加你應用程序中要用到的運行期間包。運行期間包已經在「工程選項」對話框中列舉的,不必再在命令行中添加。
Disable implicit compilation (-Z) option
(此選項在delphi6.0/7.0中有不同描述,在此不作翻譯)
目標文件擴展名(-TX)選項
選項-TX允許你改寫默認的輸出文件擴展名。例如:
dcc32 MYSTUFF -TXSYS
生成的將是一個叫做MYSTUFF.SYS的文件。
Quiet (-Q) option
安靜模式(-Q)選項
安靜模式選項禁止在編譯時顯示文件名及代碼行數,如果命令行編譯器調用這個選項的話。

它的輸出僅限於起始時行版權信息以及結尾的統計信息。當然,如果發生錯誤,它也會輸出。

DCC32.CFG file
DCC32.CFG配置文件
你可以設置一個編譯選項列表到一個叫做DCC32.CFG的配置文件中,它將用於編譯時附加到命令行參數後。配置文件的每一行都相當於一個額外的命令行參數插入到實際的命令行參數前(注意,是實際參數前)。因而,你可以使用這個配置文件改變一些命令行參數的默認設置。
命令行編譯器允許你輸入相同的命令行參數,它將忽略所有除最後一個之外。這個的話,盡管通過配置文件你可以改變一些設置,你仍然可以覆蓋它使用命令行參數。
當dcc32啟動時,它查找DCC32.CFG文件在當前目錄。如果文件沒有找到,dcc32會查找它所在的目錄。
以下是一個DCC32.CFG配置文件的例子,定義了關於文件包含、OBJ文件包含、單元文件搜索路徑信息,並改變了編譯器指令$O和$R的默認值。
-IC:/DELPHI/INC;C:/DELPHI/SRC
-OC:/DELPHI/ASM
-UC:/DELPHI/UNITS
-$R+
-$O-
現在,如果你輸入:
dcc32 MYSTUFF
編譯器把它當作你輸入如下命令:
dcc32 -IC:/DELPHI/INC;C:/DELPHI/SRC -OC:/DELPHI/ASM -UC:/DELPHI/UNITS -$R+ -$O- MYSTUFF
調試選項
編譯器有兩個命令行參數可以生成外部調試信息:MAP文件選項和調試信息選項。
Map file (-G) options
Map文件(-G)選項
選項-G指示命令行編譯器生成一個.map文件來查看一個可執行文件的布局。不同於可二進制的可執行文件和.dcu文件,.map文件是一個可讀的文本文件,可以被列印或是其它文本編輯器編輯。選項-G後必須跟字元S、P或D,去決定你想要在.map文件列出的信息。一個.MAP文件被分成三個節:
Segment
Publics
Line Numbers
-GS選項只輸出Segment Section,-GS選項輸出Segment和Publics,-GD輸出所有的三個Sections.-GD選項也生成一個擴展名為.DRC的文件包含所有的用resourcestring關鍵字聲明的字元串常量。
用默認的編譯選項{$D+,L+}編譯模塊(程序或單元),Publics Section列舉所有的全局變數、過程和函數,Line Numbers Section列舉模塊中所有的過程和函數的行號。如果用{$D+,L-}編譯選項編譯模塊,Publics Section中僅列舉在單元的interface部分定義的符號。如果用{$D-}選項編譯模塊,在Line Numbers Section沒有任何入口。
調度選項(-V)
選項-V、-VN、-VR會指示編譯器生成調試信息,它們能在命令行中組合使用。
生成Turbo Debugger使用的調試信息的選項(-V)
當你在命令行中使用-V選項時,編譯器會在可執行文件的末尾附加與Turbo Debugger5.0一致的外部調試信息。Turbo Debugger包含代碼和硬體級別的強大的斷點。
雖然附加調試信息到查執行文件中會使可執行文件增大,但是它並不影響實際可執行文件中的可執行代碼,也不需要額外的內存來啟動程序。

Ⅳ 為什麼Delphi的編譯速度如此之快

因為你的工程太小。找個巨大的工程試試
delphi的快也是老黃歷了,說它快可能是指很久以前在其它條件基本相同的情況下,代碼生成速度相對於其它編譯器快一些。編譯的快慢跟很多因素相關,比如工程的大小,是否採用了預編譯,優化的層次深度,優化選項的選擇等。

Ⅳ delphi中是否有條件編譯

delphi 中有條件編譯。以下是代碼示例:

{$IFDEFWIN32}
{$RAPP32.DCR}
{$ELSE}
{$RAPP16.DCR}
{$EDNIF}

Ⅵ DELPHI源碼如何編譯為可執行文件

Ctrl+F9,然後你一定要看下是不是有錯誤,如果有錯誤就生成不了exe!!!!然後在進一步調試可以繼續提問,希望我的回答令您滿意!

Ⅶ 如何編譯Delphi組件讓其在C++ Builder中可用

1、首先,我們要使用Rad Studio,而不是Delphi或C++Builder來操作,所以注意第一點,否則可會失敗喲。如果你只裝了CB或只裝了Delphi,你就重裝吧。
2、打開相應版本的Delphi版目錄,發現有兩個VirtualTreesD和VirtualTreesR兩個Delphi安裝包,Delphi用戶那裡,我們可以竊聽到一個重要的信息:以R結尾的一般是運行時包,以D結尾的一般是設計期包。所以我們要先打開運行期包VirtualTreesR.dpk:
3、打開項目選項(Project->Options),然後找到關鍵的地方:Delphi Compiler->Output-C/C++,在最右側的C/C++ Output file generation里,選中Generate all C++ Builder files(Including package libs)選項,然後選OK關閉窗口。
4、Ctrl+F9編譯項目,完成運行時包的編譯。
5、重復上面的步驟打開VirtualTreesD.dpk,然後修改完選項後,選擇Install來安裝包,然後你會幸運的得到提示,提示你組件已經安裝成功了。
6、現在新建一個項目,到組件面板上找TVirtualStringTree吧。
同樣的經驗適用於其它絕大多數Delphi控制項,比如Graphics32,但注意你可能需要對最終生成的HPP文件做一些改動,以避免與C++里自帶的內容沖突,這個遇到一處改掉一處,就不再綴述了。

Ⅷ 為什麼Delphi編譯出來的可執行程序這么大

因為delphi編譯的exe是基本不依賴別的dll的。另,面向對象語言,由於繼承、多態等因素,VCL庫中本身含有豐富的功能,雖然你的程序只用了其中的少部分,但封裝時自然是有不少冗餘的。所以delphi編譯的程序較大!

可以用exe文件壓縮工具將其壓縮到30%左右。

熱點內容
ceph緩存變慢 發布:2025-02-07 11:46:52 瀏覽:923
python做什麼用的 發布:2025-02-07 11:46:46 瀏覽:563
o2o與資料庫設計 發布:2025-02-07 11:35:27 瀏覽:928
ftp伺服器推薦 發布:2025-02-07 11:35:16 瀏覽:700
吉利星瑞豪華加6000是有哪些配置 發布:2025-02-07 11:25:18 瀏覽:971
李字加工編程 發布:2025-02-07 11:23:50 瀏覽:881
linux安全運維 發布:2025-02-07 11:14:19 瀏覽:737
阿里雲集群伺服器 發布:2025-02-07 11:12:38 瀏覽:453
如何選擇家庭最佳配置 發布:2025-02-07 11:06:50 瀏覽:89
javatomcat伺服器搭建伺服器 發布:2025-02-07 10:55:22 瀏覽:624