#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"Ws2_32.lib")表示鏈接Ws2_32.lib這個庫,。
和在工程設置里寫上鏈入Ws2_32.lib的效果一樣,不過這種方法寫的程序別人在使用你的代碼的時候就 不用再設置工程settings了,。告訴連接器連接的時候要找ws2_32.lib,,這樣你就不用在linker的lib設置 里指定這個lib了。 比如: #include "Mwic_32.h" #pragma comment(lib,"Mwic_32.lib") #include "c:\gdiplus\includes\gdiplus.h"
using namespace Gdiplus; #pragma comment(lib, "c:\\gdiplus\\lib\\gdiplus.lib") 就不需要在project setting里面設置了 注釋 pragma 可以允許用戶在目標文件或可執(zhí)行文件中插入注釋,。lib 指定符允許用戶向鏈接器傳遞該注釋,,以在使用對象模塊時指定其它的鏈接庫。有些用戶使用 lib 注釋 pragma 以添加鏈接器選項和庫名,,例如:
#pragma comment(lib, "MSVCRT -VERBOSE")在 Visual C++ 2.x 中,,代碼行照原樣將字符串傳遞給鏈接器,結果導致編譯時附加了 /VERBOSE 鏈接器選項和 MSVCRT.LIB 庫,。但是,,這種情況并不僅限于上述方式,。編譯器不會將注釋字符串放在引號內,,而會用空格分隔文本。
在 Visual C++ 4.0,、4.1,、和 4.2 中,編譯器將注釋字符串正確地放在引號內,,因而導致上述代碼產生以下錯誤: LINK :fatal error LNK1104:cannot open file "MSVCRT -VERBOSE.lib" 解決方案 使用下列新的 pragma 來指定鏈接器選項: #pragma comment(linker, "")
示例代碼 // Compile options needed:none // test.c
#pragma comment(lib,"MYLIBRARY -VERBOSE")
void main(void)
{
}
置#pragma comment( comment-type [,"commentstring"] )comment-type是一個預定義的標識符,,指定注釋的類型,應該是compiler,,exestr,,lib,linker之一,。commentstring是一個提供為comment-type提供附加信息的字符串,,
Remarks:1、compiler:放編譯器的版本或者名字到一個對象文件,,該選項是被linker忽略的,。
2、exestr:在以后的版本將被取消,。
3,、lib:放置一個庫搜索記錄到對象文件中,這個類型應該是和commentstring(指定你要Liner搜索的lib的名稱和路徑)這個庫的名字放在Object文件的默認庫搜索記錄的后面,,linker搜索這個這個庫就像你在命令行輸入這個命令一樣,。你可以在一個源文件中設置多個庫記錄,它們在object文件中的順序和在源文件中的順序一樣,。如果默認庫和附加庫的次序是需要區(qū)別的,,使用Z編譯開關是防止默認庫放到object模塊,。
4、linker:指定一個連接選項,,這樣就不用在命令行輸入或者在開發(fā)環(huán)境中設置了,。只有下面的linker選項能被傳給Linker.
/DEFAULTLIB
/EXPORT
/INCLUDE
/MANIFESTDEPENDENCY
/MERGE
/SECTION
(1)/DEFAULTLIB:library/DEFAULTLIB 選項將一個 library 添加到 LINK 在解析引用時搜索的庫列表。用 /DEFAULTLIB
指定的庫在命令行上指定的庫之后和 .obj 文件中指定的默認庫之前被搜索,。忽略所有默認庫 (/NODEFAULTLIB) 選項重寫 /DEFAULTLIB:library,。如果在兩者中指定了相同的 library 名稱,忽略庫 (/NODEFAULTLIB:library) 選項將重寫 /DEFAULTLIB:library,。 (2)/EXPORT:entryname[,@ordinal[,NONAME]][,DATA]使用該選項,,可以從程序導出函數,以便其他程序可以調用該函數,。也可以導出數據,。通常在 DLL 中定義導出。entryname 是調用程序要使用的函數或數據項的名稱,。ordinal 在導出表中指定范圍在 1 至 65,535 的索引,;如果沒有指定 ordinal,則 LINK 將分配一個,。NONAME 關鍵字只將函數導出為序號,,沒有 entryname。DATA 關鍵字指定導出項為數據項,??蛻舫绦蛑械臄祿棻仨氂?extern __declspec(dllimport) 來聲明。
有三種導出定義的方法,,按照建議的使用順序依次為: 源代碼中的 __declspec(dllexport)
.def 文件中的EXPORTS 語句
LINK 命令中的 /EXPORT 規(guī)范
所有這三種方法可以用在同一個程序中,。LINK 在生成包含導出的程序時還創(chuàng)建導入庫,除非生成中使用了 .exp 文件,。
LINK 使用標識符的修飾形式,。編譯器在創(chuàng)建 .obj 文件時修飾標識符。如果 entryname 以其未修飾的形式指定給鏈接器(與其在源代碼中一樣),,則 LINK 將試圖匹配該名稱,。如果無法找到唯一的匹配名稱,則 LINK 發(fā)出錯誤信息,。當需要將標識符指定給鏈接器時,,請使用 Dumpbin 工具獲取該標識符的修飾名形式。 (3)/INCLUDE:symbol/INCLUDE 選項通知鏈接器將指定的符號添加到符號表,。若要指定多個符號,,請在符號名稱之間鍵入逗號 (,)、分號 (;) 或空格。在命令行上,,對每個符號指定一次 /INCLUDE:symbol,。
鏈接器通過將包含符號定義的對象添加到程序來解析 symbol。該功能對于添包含不會鏈接到程序的庫對象非常有用,。用該選項指定符號將通過 /OPT:REF 重寫該符號的移除,。 |
|