當前位置:首頁 » 編程軟體 » 因為此編譯單元與命名模塊相關聯

因為此編譯單元與命名模塊相關聯

發布時間: 2022-05-03 12:54:31

java 關於封裝的這個問題 為什麼會報錯

首先,建議題主直接把代碼貼出來;

其次,一個".java"源文件中可以有多個類,但只能有一個public的類,並且public的類名必須與文件名相一致。一個文件中可以只有非public類,如果只有一個非public類,此類可以跟文件名不同。

在java編程思想(第四版)一書中有這樣3段話(6.4 類的訪問許可權):

1.每個編譯單元(文件)都只能有一個public類,這表示,每個編譯單元都有單一的公共介面,用public類來表現。該介面可以按要求包含眾多的支持包訪問許可權的類。如果在某個編譯單元內有一個以上的public類,編譯器就會給出錯誤信息。

2.public類的名稱必須完全與含有該編譯單元的文件名相同,包含大小寫。如果不匹配,同樣將得到編譯錯誤。

3.雖然不是很常用,但編譯單元內完全不帶public類也是可能的。在這種情況下,可以隨意對文件命名。

② eclipsejava第一行public前面就報錯,怎麼解決呀

先是package 包名 然後才是類名。

③ 內聯函數的函數內聯問題

除了 相關的問題, 內聯擴展一般,語言功能作為一個內聯函數可能不被視為有價值的,因為它們出現的原因,對於一個數字:
通常,一個編譯器是在一個比人類更有利的地位來決定某一特定功能是否應該被內聯。 有時,編譯器可能無法盡可能多的功能內嵌作為程序員表示。
一個重要的一點需要注意的是代碼(內聯函數)得到暴露其客戶端(調用函數)。
隨著功能的演變,它們有可能成為合適的內聯,他們不前,或不再在他們面前的內聯合適。 而內聯或取消內聯函數比從宏轉換為更容易,但仍需要額外的維修,一般產量相對較少的利益。
用於本機C型編譯系統的擴散可以增加編譯時間,因為他們的身體的中間表示是到每個調用點,他們都是內聯復制內聯函數。在代碼大小可能增加是由在編譯時間可能增加鏡像。
C++中內嵌的規范要求只有一個額外在另一個編譯單元,功能的外部定義時,相應的內聯定義,可以發生在不同的編譯單元多次,如果該函數用於地方。這很容易導致連接器,因為這樣的定義不是由程序員提供的錯誤。 出於這個原因,往往是在C99內聯一起使用靜態的,也給出了函數的內部聯系。
在C + +,有必要定義一個在每一個模塊(編譯單元)內聯函數使用一個普通的功能,而必須在只有一個模塊中定義它。否則,就不可能編制的所有其他模塊一個模塊獨立。
對於功能問題與優化本身,而不是語言,請參閱使用內聯擴展問題 。
內聯函數是使用inline關鍵字聲明的函數,也成內嵌函數,它主要的作用是解決程序的運行效率。
使用內聯函數的時候要注意:
1.遞歸函數不能定義為內聯函數
2.內聯函數一般適合於不存在while和switch等復雜的結構且只有1~5條語句的小函數上,否則編譯系統將該函數視為普通函數。
3.內聯函數只能先定義後使用,否則編譯系統也會把它認為是普通函數。
4.對內聯函數不能進行異常的介面聲明。

④ 編譯內核模塊錯誤(linux

在這些高版本的RedHat Linux上,我們如果需要定製內核的話,沒有直接的源代碼rpm可以安裝,只能通過kernel.org下載的tar.gz的包手工安裝,或者通過kernel-*.src.rpm編譯出kernel-source包再來安裝。後面一種方法可以享受到RedHat針對內核的某些參數和代碼的優化,因此對使用RedHat發行版特別是企業版本的,是有一定好處的。
但是目前很多人至今分不清內核,內核開發,內核源代碼一些包之間的關系,因此在編譯內核的時候經常走彎路,同時RedHat官方對於如果得到kernel-source也沒有明確的指示,導致很多人不得要領。

首先認清楚各rpm包的內容和用途
kernel-*.rpm ------------- 內核二進制包,沒有的話系統都起不來
kernel-sourcecode-*.rpm------------------- 內核源代碼包,安裝到/usr/src/linux-*下面的,包含內核源代碼,編譯內核必須(當然是不考慮用kernel.tar.gz編譯的情況),但高版本RedHat Linux不再提供此rpm,原因參見官方Release Note,這篇文章的最終目的就是要我們自己把這個包搞出來。
kernel-devel-*.rpm----------------內核開發包,安裝到/usr/src/kernels,用於內核模塊開發,組織形式跟內核源代碼包類似,包含了部分內核源代碼。注意很多人誤認為這個就是內核源代碼包,直接拿它來編譯內核,當然不可能成功。這個包只是用於內核模塊一級開發,例如驅動程序等,雖然也可以make menuconfig make dep等,但make bzImage是不可能成功的,因為缺失了核心源代碼。
kernel-*.src.rpm---------------RedHat提供的用於建立rpm的源代碼包,安裝到/usr/src/redhat中,使用rpmbuild可以從這個包中build出上面所說的所有包。

現在就來從src.rpm編譯出上面的所有的包,除了sourcecode這個包其他的包都可以在不用修改任何地方的情況下直接rpmbuild出來,唯有sourcecode這個比較麻煩,一定要按照下面的步驟來做,我以RedHat AS4 所帶的版本為例,其他版本相同。

#首先安裝src.rpm
rpm -ivh kernel-2.6.9-5.EL.src.rpm
#進入相應目錄,要修改spec文件
cd /usr/src/redhat/SPECS
vi kernel-2.6.spec
#主要修改如下地方:
1,define buildsource 0------------我的這個在第8行,改為1,這就是為什麼沒有源代碼包的原因,因為默認不生成源代碼包
2, Requires: qt-devel, gtk2-devel readline-devel ncurses-devel-------我的在572行,如果沒用用X的話,把這句注釋掉,這樣編譯出來的包就不依賴於X-window的某些包,因為內核配置是可以make xconfig的,所以默認依賴X-window,我沒裝X-window,因此這個就去掉了。
#保存退出
touch /etc/beehive-root
#這句命令非必須,如果不做的話,最後編譯出來的包都會變成kernel-*.*-root.rpm,多了個root,據說是為了標示包的編譯人的,如果touch了這個文件,就沒有這個問題了,命名和官方rpm一樣。
rpmbuild -ba --target=i686 ./kernel-2.6.spec
#編譯i686平台的所有包,這樣上面介紹的所有包都會生成,或者換成rpmbuild -bb --target=i686 ./kernel-2.6.spec只編譯非src.rpm。
#所有包就會生成到/usr/src/redhat/RPMS/i686下面

#如果只需要sourcecode而並非所有rpm包,那在修改spec文件時還要修改如下行:

48 %ifarch noarch
49 %define builddoc 1
50 %define buildsource 0----------------這里0修改為1
在編譯的時候使用rpmbuild -ba --target=noarch ./kernel-2.6.spec,這樣僅僅編譯soucecode和doc包,會節省很多時間。

注意,此篇文章所講所有內容僅適用於使用2.6內核的新版本RedHat Linux,2.4版本內核代碼組織方式不同,不適用此文章。

以上這篇文章取自互聯網,我忘了出處,尊敬作者.

⑤ 在java中,什麼是編譯單元。如何根據編譯單元創建類庫,又如何使用這個類庫。

豬哥解答:
c領域倒是有編譯單元的說法,java 中沒有聽說。
類庫嗎,功能類集合,就是一組類放一起來實現某個功能。不要太去追概念性的東西,什麼白貓黑貓,能抓老鼠才是好貓。

類庫舉例:人、購物車、超市、商品,人去超市購買商品,道具是購物車,那我要准備幾個類
人.java,購物車.java,超市.java,商品.java,這幾個類通過人這個擁有各種動作行為(方法)的類聯繫到一起,實現了人推車在超市中買商品的購物動作。
那麼我這也就是一個類庫,多個類集中到一起,為了實現人購買商品這個功能。

⑥ 在寫c#程序時命名空間有什麼作用\

網路上面就有

C#中的類是利用命名空間組織起來的。命名空間提供了一種從邏輯上組織類的方式,防止命名沖突。
命名空間聲明
用namespace 關鍵字用於聲明一個命名空間。此命名空間范圍允許您組織代碼並為您提供了創建全局唯一類型的方法。
namespace name
{
類型定義
}
其中:在命名空間中,可以聲明類、介面、結構、枚舉、委託 命名空間。

如果未顯式聲明命名空間,則會創建默認命名空間。該默認的命名空間(有時稱為全局命名空間)。全局命名空間中的任何標識符都可用於命名的命名空間中。

命名空間聲明可以作為頂級聲明出現在編譯單元中,當命名空間聲明作為頂級聲明出現在編譯單元中時,該命名空間成為全局命名空間的一個成員。

命名空間聲明出現在另一個命名空間聲明內時,該內部命名空間就成為包含著它的外部命名空間的一個成員。

無論是何種情況,一個命名空間的名稱在它所屬的命名空間內必須是唯一的。命名空間隱式地為 public,而且在命名空間的聲明中不能包含任何訪問修飾符。

嵌套的命名空間
命名空間聲明中聲明命名空間,各命名空間用」.」分隔。
例如:
namespace N1.N2
{
class A {}
class B {}
}
在語義上等效於
namespace N1
{
namespace N2
{
class A {}
class B {}
}
}

引用類
引用一個類可以用完全限定名來限定引用類(類名前加上命名空間名),以防止命名沖突。
using 指令來導入其他命名空間和類型的名稱,直接地而不是通過限定名來引用它們。

Using指令
using 別名指令為一個命名空間或類型啟用一個別名。
using 命名空間指令用於導入一個命名空間的類型成員。

(1) using 命名空間指令將一個命名空間中所包含的類型導入到編譯單元或命名空間體中,從而可以直接使用這些被導入的類型的標識符而不必加上它們的限定名。
如:
namespace N1.N2
{
class A {}
}
namespace N3
{
using N1.N2;
class B
{
public static void Main()
{
A a=new A();
}
}
}
上面的示例中,在 N3 命名空間中N1.N2 的類型成員是直接可用的,不需要完全限定名.

(2)using 命名空間指令導入包含在給定命名空間中的類型,但要注意,它不導入嵌套的命名空間。
示例:
namespace N1.N2
{
class A {}
}
namespace N3
{
using N1;
class B
{
public static void Main()
{
A a=new A(); //錯誤,N1.N2命名空間中的類型沒有導入到命名空間N3中
}
}
}

(3)using 命名空間指令導入的名稱會被編譯單元或命名空間體中具有相同名稱的成員所隱藏。

例如:
namespace N1.N2
{
class A {}
class B {}
}
namespace N3
{
using N1.N2;
class A {}//N3.A
}
在 N3 命名空間中的A類與N1.N2命名空間中的A類名稱相同,則N1.N2.A被N3.A隱藏,A 引用 N3.A 而不是 N1.N2.A。

(4)同一編譯單元或命名空間體中的 using 命名空間指令導入多個命名空間時,如果它們所包含的類型中有重名的,則直接引用該名稱就被認為是不明確的。
示例:
namespace N1
{
class A {}
}
namespace N2
{
class A {}
}
namespace N3
{
using N1;
using N2;
class B
{
public static void Main()
{
A a=new A()// 錯誤A類明確,要使用完全限定名
}
}
}
N1 和 N2 都包含一個成員 A,而由於 N3 將兩者都導入,所以在 N3 中引用 A 會導致一個編譯時錯誤名稱沖突.

using 別名指令用於為一個命名空間或類型指定一個別名。
using 標識符 = 命名空間或類型名稱 ;

例如:
namespace N1.N2
{
class A {}
}
namespace N3
{
using A = N1.N2.A;
class B: A {}
}
上面的示例中,在 N3 命名空間中,A 是 N1.N2.A 的別名,因此類 N3.B 從類 N1.N2.A 派生。通過為 N1.N2 創建別名 R 然後引用 R.A 可以得到同樣的效果:
namespace N3
{
using R = N1.N2;
class B: R.A {}
}

using 別名指令中的別名在直接包含該 using 別名指令的編譯單元或命名空間的聲明空間內必須是唯一的。例如:
namespace N3
{
class A {}
}
namespace N3
{
using A = N1.N2.A; // 錯誤,命名沖突
}
上例中,N3 已包含了成員 A,因此 using 別名指令使用 A 作標識符會導致一個編譯時錯誤。

⑦ 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}
at the beginning of MYSTUFF.pas. If you specify multiple -D directives, you can concatenate the symbol lists. Therefore:
如果你指定了多個「-D」選項,你可以聯接它們,如下:
dcc32 MYSTUFF -DIOCHECK-DDEBUG-DLIST

is equivalent to the first example.
等同於第一個例子。

Compiler mode options
編譯模式選項
A few options affect how the compiler itself functions. As with the other options, you can use these with either the hyphen or the slash format. Remember to separate the options with at least one blank.
有幾個選項能影響編譯器自身的功能。像其它選項一個,你可以使用「/」或「-」的格式。別忘了用至少一個空格分隔這些選項。
Make (-M) option
選項(-M)
The command-line compiler has built-in MAKE logic to aid in project maintenance. The -M option instructs command-line compiler to check all units upon which the file being compiled depends. Using this option results in a much quicker compile time.
命令行編譯器使用構造邏輯的方式來維護工程。「-M」選項指示編譯器檢查所有與編譯文件相關聯的文件。用這個參數會導致編譯時間增大。
A unit is recompiled under the following conditions:
一個源文件在下列情況下會重新編譯:
The source file for that unit has been modified since the unit file was created.
源文件被創建以來被修改過;
用「$I」指令包含的任何文件,用「$L」包含的任何.Obj文件,或用「$R」關聯的任何資源文件.Res,比源文件中的要新;
Any file included with the $I directive, any .OBJ file linked in by the $L directive, or any .res file referenced by the $R directive, is newer than the unit file.
The interface section of a unit referenced in a uses statement has changed.
單元介面部分interface的uses段有改動。
Units compiled with the -Z option are excluded from the make logic.
在單元編譯時指令「-Z」在構造邏輯期不被接受。
If you were applying this option to the previous example, the command would be:
如果你在上一個例子中使用這個指令,編譯命令就應該是:
dcc32 MYSTUFF -M
Build all (-B) option
編譯所有 選項(-B)
Instead of relying on the -M option to determine what needs to be updated, you can tell command-line compiler to update all units upon which your program depends using the -B option. You can't use -M and -B at the same time. The -B option is slower than the -M option and is usually unnecessary.
用於取代要知道哪些單元需要更新-M的選項,你可以使用-B選項來更新所有你的程序中關聯的單元。你不能在程序中同時使用-M和-B。選項-B比-M速度更慢,而且它並不是必需的。
If you were using this option in the previous example, the command would be
如果你在前一個例子中使用這個參數,編譯命令就應該是:
dcc32 MYSTUFF -B
Find error (-F) option
查找錯誤 選項(-F)
When a program terminates e to a runtime error, it displays an error code and the address at which the error occurred. By specifying that address in a -Faddress option, you can locate the statement in the source text that caused the error, provided your program and units were compiled with debug information enabled (via the $D compiler directive).
當一個程序由於運行期間錯誤而終止時,它會顯示一個錯誤號和錯誤地址在錯誤發生時。用-Faddress選項來指定錯誤地址,你在源文件中能找到引發錯誤的位置,如果你的程序和單元編譯時附加了調試信息(使用$D編譯器指令)。
In order for the command-line compiler to find the runtime error with -F, you must compile the program with all the same command-line parameters you used the first time you compiled it.
為了命令行編譯器能用-F選項查找運行期間錯誤,你必須傳遞與第一次編譯時相同的指令列表。
As mentioned previously, you must compile your program and units with debug information enabled for the command-line compiler to be able to find runtime errors. By default, all programs and units are compiled with debug information enabled, but if you turn it off, using a {$D-} compiler directive or a -$D- option, the command-line compiler will not be able to locate runtime errors.
先前提到過,你的程序和單元必須啟用調試信息,命令行編譯器才能查找運行期間錯誤。默認情況下,所有的程序和單都是啟用調試信息的,除非你用{-D}或-$D-指令關閉它,這樣,命令行編譯器就不能查找運行期間錯誤了。
Use packages (-LU) option
使用包(-LU)選項
Use the -LU option to list additional runtime packages that you want to use in the application being compiled. Runtime packages already listed in the Project Options dialog box need not be repeated on the command line.
使用-LU選項來在編譯時添加你應用程序中要用到的運行期間包。運行期間包已經在「工程選項」對話框中列舉的,不必再在命令行中添加。
Disable implicit compilation (-Z) option
(此選項在delphi6.0/7.0中有不同描述,在此不作翻譯)
The -Z option prevents packages and units from being implicitly recompiled later. With packages, it is equivalent to placing {$ IMPLICITBUILD OFF} in the .dpk file. Use -Z when compiling packages that provide low-level functionality, that change infrequently between builds, or whose source code will not be distributed.
Target file extension (-TX) option
目標文件擴展名(-TX)選項
The -TX option lets you override the default extension for the output file. For example,
選項-TX允許你改寫默認的輸出文件擴展名。例如:
dcc32 MYSTUFF -TXSYS
generates compiled output in a file called MYSTUFF.SYS.
生成的將是一個叫做MYSTUFF.SYS的文件。
Quiet (-Q) option
安靜模式(-Q)選項
The quiet mode option suppresses the printing of file names and line numbers ring compilation. When the command-line compiler is invoked with the quiet mode option
安靜模式選項禁止在編譯時顯示文件名及代碼行數,如果命令行編譯器調用這個選項的話。
dcc32 MYSTUFF -Q its output is limited to the startup right message and the usual statistics at the end of compilation. If any errors occur, they will be reported.

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

DCC32.CFG file
DCC32.CFG配置文件
You can set up a list of options in a configuration file called DCC32.CFG, which will then be used in addition to the options entered on the command line. Each line in configuration file corresponds to an extra command-line argument inserted before the actual command-line arguments. Thus, by creating a configuration file, you can change the default setting of any command-line option.
你可以設置一個編譯選項列表到一個叫做DCC32.CFG的配置文件中,它將用於編譯時附加到命令行參數後。配置文件的每一行都相當於一個額外的命令行參數插入到實際的命令行參數前(注意,是實際參數前)。因而,你可以使用這個配置文件改變一些命令行參數的默認設置。
The command-line compiler lets you enter the same command-line option several times, ignoring all but the last occurrence. This way, even though you've changed some settings with a configuration file, you can still override them on the command line.
命令行編譯器允許你輸入相同的命令行參數,它將忽略所有除最後一個之外。這個的話,盡管通過配置文件你可以改變一些設置,你仍然可以覆蓋它使用命令行參數。
When dcc32 starts, it looks for DCC32.CFG in the current directory. If the file isn't found there, dcc32 looks in the directory where DCC32.EXE resides.
當dcc32啟動時,它查找DCC32.CFG文件在當前目錄。如果文件沒有找到,dcc32會查找它所在的目錄。
Here's an example DCC32.CFG file, defining some default directories for include, object, and unit files, and changing the default states of the $O and $R compiler directives:
以下是一個DCC32.CFG配置文件的例子,定義了關於文件包含、OBJ文件包含、單元文件搜索路徑信息,並改變了編譯器指令$O和$R的默認值。
-IC:\DELPHI\INC;C:\DELPHI\SRC
-OC:\DELPHI\ASM
-UC:\DELPHI\UNITS
-$R+
-$O-
Now, if you type:
現在,如果你輸入:
dcc32 MYSTUFF
the compiler performs as if you had typed the following:
編譯器把它當作你輸入如下命令:
dcc32 -IC:\DELPHI\INC;C:\DELPHI\SRC -OC:\DELPHI\ASM -UC:\DELPHI\UNITS -$R+ -$O- MYSTUFF

Debug options
調試選項
The compiler has two sets of command-line options that enable you to generate external debugging information: the map file options and the debug info options.
編譯器有兩個命令行參數可以生成外部調試信息:MAP文件選項和調試信息選項。
Map file (-G) options
Map文件(-G)選項
The -G option instructs the command-line compiler to generate a .map file that shows the layout of the executable file. Unlike the binary format of executable and .dcu files, a .map file is a legible text file that can be output on a printer or loaded into the editor. The -G option must be followed by the letter S, P, or D to indicate the desired level of information in the .map file. A .MAP file is divided into three sections:
選項-G指示命令行編譯器生成一個.map文件來查看一個可執行文件的布局。不同於可二進制的可執行文件和.dcu文件,.map文件是一個可讀的文本文件,可以被列印或是其它文本編輯器編輯。選項-G後必須跟字元S、P或D,去決定你想要在.map文件列出的信息。一個.MAP文件被分成三個節:
Segment
Publics
Line Numbers
-GS outputs only the Segment section, -GP outputs the Segment and Publics section, and -GD outputs all three sections. -GD also generates a .DRC file that contains tables of all string constants declared using the resourcestring keyword.
-GS選項只輸出Segment Section,-GS選項輸出Segment和Publics,-GD輸出所有的三個Sections.-GD選項也生成一個擴展名為.DRC的文件包含所有的用resourcestring關鍵字聲明的字元串常量。
For moles (program and units) compiled in the {$D+,L+} state (the default), the Publics section shows all global variables, proceres, and functions, and the Line Numbers section shows line numbers for all proceres and functions in the mole. In the {$D+,L-} state, only symbols defined in a unit's interface part are listed in the Publics section. For moles compiled in the {$D-} state, there are no entries in the Line Numbers section.
用默認的編譯選項{$D+,L+}編譯模塊(程序或單元),Publics Section列舉所有的全局變數、過程和函數,Line Numbers Section列舉模塊中所有的過程和函數的行號。如果用{$D+,L-}編譯選項編譯模塊,Publics Section中僅列舉在單元的interface部分定義的符號。如果用{$D-}選項編譯模塊,在Line Numbers Section沒有任何入口。
Debug info (-V) options
調度選項(-V)
The -V options (-V, -VN. and -VR), which cause the compiler to generate debug information, can be combined on the command line.
選項-V、-VN、-VR會指示編譯器生成調試信息,它們能在命令行中組合使用。
Generate Turbo Debugger debug info (-V) option
生成Turbo Debugger使用的調試信息的選項(-V)
When you specify the -V option on the command line, the compiler appends Turbo Debugger 5.0-compatible external debug information at the end of the executable file. Turbo Debugger includes both source- and machine-level debugging and powerful breakpoints.
當你在命令行中使用-V選項時,編譯器會在可執行文件的末尾附加與Turbo Debugger5.0一致的外部調試信息。Turbo Debugger包含代碼和硬體級別的強大的斷點。
Even though the debug information generated by -V makes the resulting executable file larger, it does not affect the actual code in the executable, and does not require additional memory to run the program.
雖然附加調試信息到查執行文件中會使可執行文件增大,但是它並不影響實際可執行文件中的可執行代碼,也不需要額外的內存來啟動程序。
The extent of debug information appended to the executable file depends on the setting of the $D and $L compiler directives in each of the moles (program and units) that make up the application. For moles compiled in the {$D+,L+} state, which is the default, all constant, variable, type, procere, and function symbols are known to the debugger. In the {$D+,L-} state, only symbols defined in a unit's interface section are known to the debugger. In the {$D-} state, no line-number records are generated, so the debugger cannot display source lines whe

⑧ vc如何快速調試出各代碼文件與軟體模塊的對應關系

放二進制資源的中間文件,VC把當前資源文件轉換成二進制格式,並存放在APS文件中,以加快資源裝載速度。資源輔助文件。

.BMP:點陣圖資源文件。

.BSC:瀏覽信息文件,由瀏覽信息維護工具(BSCMAKE)從原始瀏覽信息文件(.SBR)中生成,BSC文件可以用來在源代碼編輯窗口中進行快速定位。用於瀏覽項目信息的,如果用source brower的話就必須有這個文件。可以在project options里去掉Generate Browse Info File,這樣可以加快編譯進度。

.C:用C語言編寫的源代碼文件。

.CLW:ClassWizard生成的用來存放類信息的文件。classwizard信息文件,ini文件的格式。

.CNT:用來定義幫助文件中「Contents」的結構。

.CPP或.CXX:用C++語言編寫的源代碼文件。

.CUR:游標資源文件。

.DEF:模塊定義文件,供生成動態鏈接庫時使用。

.DLG:定義對話框資源的獨立文件。這種文件對於VC工程來說並非必需,因為VC一般把對話框資源放在.RC資源定義文件中。

.DSP:VC開發環境生成的工程文件,VC4及以前版本使用MAK文件來定義工程。項目文件,文本格式。

.DSW:VC開發環境生成的WorkSpace文件,用來把多個工程組織到一個WorkSpace中。工作區文件,與.dsp差不多。

.EXP:由LIB工具從DEF文件生成的輸出文件,其中包含了函數和數據項目的輸出信息,LINK工具將使用EXP文件來創建動態鏈接庫。只有在編譯DLL時才會生成,記錄了DLL文件中的一些信息。

.H、.HPP或.HXX:用C/C++語言編寫的頭文件,通常用來定義數據類型,聲明變數、函數、結構和類。

.HLP:Windows幫助文件。

.HM:在Help工程中,該文件定義了幫助文件與對話框、菜單或其它資源之間ID值的對應關系。

.HPJ:由Help Workshop生成的Help工程文件,用來控制Help文件的生成過程。

.HPG,生成幫助的文件的工程。

.ICO:圖標資源文件。

.ILK:連接過程中生成的一種中間文件,只供LINK工具使用。

.INI:配置文件。

.LIB:庫文件,LINK工具將使用它來連接各種輸入庫,以便最終生成EXE文件。

.LIC:用戶許可證書文件,使用某些ActiveX控制項時需要該文件。

.MAK:即MAKE文件,VC4及以前版本使用的工程文件,用來指定如何建立一個工程,VC6把MAK文件轉換成DSP文件來處理。

.MAP:由LINK工具生成的一種文本文件,其中包含有被連接的程序的某些信息,例如程序中的組信息和公共符號信息等。執行文件的映像信息記錄文件。

.MDP:舊版本的項目文件,相當於.dsp

.NCB:NCB是「No Compile Browser」的縮寫,其中存放了供ClassView、WizardBar和Component Gallery使用的信息,由VC開發環境自動生成。無編譯瀏覽文件。當自動完成功能出問題時可以刪除此文件。編譯工程後會自動生成。

.OBJ:由編譯器或匯編工具生成的目標文件,是模塊的二進制中間文件。

.ODL:用對象描述語言編寫的源代碼文件,VC用它來生成TLB文件。

.OLB:帶有類型庫資源的一種特殊的動態鏈接庫,也叫對象庫文件。

.OPT:VC開發環境自動生成的用來存放WorkSpace中各種選項的文件。工程關於開發環境的參數文件。如工具條位置信息等。

.PBI、.PBO和.PBT:由VC的性能分析工具PROFILE生成並使用的三種文件。

.PCH:預編譯頭文件,比較大,由編譯器在建立工程時自動生成,其中存放有工程中已經編譯的部分代碼,在以後建立工程時不再重新編譯這些代碼,以便加快整個編譯過程的速度。

.PDB:程序資料庫文件,在建立工程時自動生成,其中存放程序的各種信息,用來加快調試過程的速度。記錄了程序有關的一些數據和調試信息。

.PLG:編譯信息文件,編譯時的error和warning信息文件。

.RC:資源定義文件。

.RC2:資源定義文件,供一些特殊情況下使用。

.REG:注冊表信息文件。

.RES:二進制資源文件,資源編譯器編譯資源定義文件後即生成RES文件。

.RTF:Rich Text Format(豐富文本格式)文檔,可由Word或寫字板來創建,常被用來生成Help文件。

.SBR:VC編譯器為每個OBJ文件生成的原始瀏覽信息文件,瀏覽信息維護工具(BSCMAKE)將利用SBR文件來生成BSC文件。

.TLB:OLE庫文件,其中存放了OLE自動化對象的數據類型、模塊和介面定義,自動化伺服器通過TLB文件就能了解自動化對象的使用方法。

.WAV:聲音資源文件。宋濤

⑨ MinGW怎樣設置動態鏈接庫的路徑

靜態庫和動態庫的區別
1.靜態庫

之所以稱之為"靜態庫",是因為在鏈接階段,會將匯編生成的目標文件.o與引用到的庫一起鏈接打包到可執行文件中。因此對應的鏈接方式稱為靜態鏈接。
從本質上來說,一個靜態庫可以簡單看成是一組目標文件(.o/.obj文件)的集合,靜態庫與匯編生成的目標文件(.o/.obj)一起鏈接為可執行文件。
靜態庫(後綴為.a/.lib)和.o文件格式相似。即很多目標文件經過壓縮打包後形成的一個文件
靜態庫特點總結:
1. 靜態庫對函數庫的鏈接是放在編譯時期完成的
2. 程序在運行時與函數庫再無瓜葛,移植方便,因為代碼已經嵌入到程序裡面了,可以直接跟著程序走,不存在對外部文件的依賴
3. 浪費空間和資源,因為所有相關的目標文件與牽涉到的函數庫被鏈接合成一個可執行文件,會增加原本程序的空間

GCC編譯、使用靜態庫
靜態庫的後綴是.a(並沒有強制規定),它的產生分兩步
1. 由源文件編譯生成一堆.o,每個.o里都包含這個編譯單元的符號表
2. ar命令將很多.o轉換成.a,成為靜態庫,從這點也可以看出來,庫是很多.o文件的集合

編譯好靜態庫文件之後,我們就可以在其他程序中使用靜態庫文件中的函數了
1. 只需要在使用到這些公用函數的源程序中包含這些公用函數的原型聲明(include對應的頭文件)
2. 然後在用gcc命令生成目標文件時指明靜態庫名
3. gcc將會從靜態庫中將公用函數連接到目標文件中
4. 注意,gcc會在靜態庫名前加上前綴lib,然後追加擴展名.a得到的靜態庫文件名來查找靜態庫文件,因此,我們在寫需要連接的庫時,只寫名字就可以,如libhello.a的庫,只寫: -lhello

2.動態庫

動態庫文件名命名規范和靜態庫文件名命名規范類似,也是在動態庫名增加前綴lib,但其文件擴展名為.so(.dll)。例如:我們將創建的動態庫名為myhello,則動態庫文件名就是libmyhello.so。
使用庫是重用代碼的一種絕佳方式。 您不必在自己創建的每個程序中重新實現同一常式,而只需對這些常式寫入一次,然後從需要該功能的應用程序引用它們即可。 通過將代碼放入 DLL,您節省在引用它的每個應用程序的空間,而且,您可以更新 DLL,而無需重新編譯所有應用程序。
動態鏈接庫 (DLL) 是作為共享函數庫的可執行文件。動態鏈接提供了一種方法,使進程可以調用不屬於其可執行代碼的函數。DLL 還有助於共享數據和資源。多個應用程序可同時訪問內存中單個 DLL 副本的內容。
動態鏈接與靜態鏈接的不同之處在於它允許可執行模塊(.dll 文件或 .exe 文件)僅包含在運行時定位 DLL 函數的可執行代碼所需的信息。在靜態鏈接中,鏈接器從靜態鏈接庫獲取所有被引用的函數,並將庫同代碼一起放到可執行文件中。
使用動態鏈接代替靜態鏈接有若干優點。DLL 節省內存,減少交換操作,節省磁碟空間,更易於升級,提供售後支持,提供擴展 MFC 庫類的機制,支持多語言程序,並使國際版本的創建輕松完成。

DLL 的類型
當您在應用程序中載入 DLL 時,可以使用兩種鏈接方法來調用導出的 DLL 函數。這兩種鏈接方法是載入時動態鏈接和運行時動態鏈接。
動態庫一般會有對應的導入庫,方便程序靜態載入動態鏈接庫,否則你可能就需要自己LoadLibary調入DLL文件,然後再手工GetProcAddress獲得對應函數了。有了導入庫,你只需要鏈接導入庫後按照頭文件函數介面的聲明調用函數就可以了。
載入時動態鏈接(load-time dynamic linking)
在載入時動態鏈接中,應用程序像調用本地函數一樣對導出的 DLL 函數進行顯式調用。要使用載入時動態鏈接,請在編譯和鏈接應用程序時提供頭文件 (.h) 和導入庫文件 (.lib)。當您這樣做時,鏈接器將向系統提供載入 DLL 所需的信息,並在載入時解析導出的 DLL 函數的位置。
運行時動態鏈接(run-time dynamic linking)
在運行時動態鏈接中,應用程序調用 LoadLibrary 函數或 LoadLibraryEx 函數以在運行時載入 DLL。成功載入 DLL 後,可以使用 GetProcAddress 函數獲得要調用的導出的 DLL 函數的地址。在使用運行時動態鏈接時,無需使用導入庫文件。

⑩ excel2013 以下隱藏模塊存在編譯錯誤...

這是自帶幫助里查到的:
隱藏模塊中的編譯錯誤 <模塊名稱>
特性

此錯誤的原因和解決方案如下:
錯誤原因:

當受保護(隱藏)模塊內的 VBA 代碼中存在編譯錯誤時,會發生此錯誤。由於模塊受到保護,因此不會顯示此特定編譯錯誤。

可能的解決方案:
如果您有權訪問文檔或項目中的 VBA 代碼,則取消對模塊的保護,然後再次運行代碼來查看特定錯誤。
如果您無權訪問文檔中的 VBA 代碼,則聯系文檔的作者,讓其更新隱藏模塊中的代碼。

熱點內容
柱子箍筋加密區長度 發布:2025-05-14 10:18:29 瀏覽:351
雲伺服器和內網穿透哪個好 發布:2025-05-14 10:16:41 瀏覽:627
安徽新能源網路配置是什麼 發布:2025-05-14 10:06:24 瀏覽:631
pinode搭建伺服器 發布:2025-05-14 10:04:23 瀏覽:4
電腦伺服器ip名稱 發布:2025-05-14 10:01:09 瀏覽:749
connectorpython 發布:2025-05-14 09:48:50 瀏覽:763
配置不好怎麼辦 發布:2025-05-14 09:46:40 瀏覽:623
數據流程圖中的數據存儲是指 發布:2025-05-14 09:46:39 瀏覽:446
我的世界伺服器id前綴mod 發布:2025-05-14 09:45:53 瀏覽:831
完整後台網站源碼 發布:2025-05-14 09:45:46 瀏覽:456