Ⅰ rokon如何編譯成庫文件
自己回復一下,
還是不知道如何編譯成庫文件,
但可以將src文件拷貝到新建的工程里,
直接引用和修改
Ⅱ DLL文件編譯,高手請指教。
DLL文件即動態鏈接庫文件,是一種可執行文件,它允許程序共享執行特殊任務所必需的代碼和其他資源。Windows提供的DLL文件中包含了允許基於Windows的程序在Windows環境下操作的許多函數和資源。
DLL多數情況下是帶有DLL擴展名的文件,但也可能是EXE或其他擴展名。它們向運行於Windows操作系統下的程序提供代碼、數據或函數。程序可根據DLL文件中的指令打開、啟用、查詢、禁用和關閉驅動程序。
DLL的全稱是Dynamic Link Library, 中文叫做「動態鏈接文件」。在Windows操作系統中, DLL對於程序執行是非常重要的, 因為程序在執行的時候, 必須鏈接到DLL文件, 才能夠正確地運行。而有些DLL文件可以被許多程序共用。因此, 程序設計人員可以利用DLL文件, 使程序不至於太過巨大。但是當安裝的程序越來越多, DLL文件也就會越來越多, 如果當你刪除程序的時候, 沒有用的DLL文件沒有被刪除的話, 久而久之就造成系統的負擔了。
DLL是動態連接庫。使用動態連接庫的一些好處是:
1.多個應用程序共享代碼和數據:比如Office軟體的各個組成部分有相似的外觀和功能,這就是通過共享動態連接庫實現的。
2.在鉤子程序過濾系統消息時必須使用動態連接庫。
3.動態連接庫以一種自然的方式將一個大的應用程序劃分為幾個小的模塊,有利於小組內部成員的分工與合作。而且,各個模塊可以獨立升級。如果小組中的一個成員開發了一組實用常式,他就可以把這些常式放在一個動態連接庫中,讓小組的其他成員使用。
4.為了實現應用程序的國際化,往往需要使用動態連接庫。使用動態連接庫可以將針對某一國家、語言的信息存放在其中。對於不同的版本,使用不同的動態連接庫。在使用AppWizard生成應用程序時,我們可以指定資源文件使用的語言,這就是通過提供不同的動態連接庫實現的。
VC++、C++ Builder、Delphi都可以編寫DLL文件。Visual Basic 5.0以上版本也可以編寫一種特殊的DLL,即ActiveX DLL。
DLL不是獨立運行的程序,它是某個程序的一個部分,它只能由所屬的程序調用。用戶不能,也不需要打開它。
Ⅲ linux編譯動態庫文件
這個沒關系的啊,找不到符合是你編譯Makefile什麼的本身就有問題,不是你的庫有問題
Ⅳ Linux下編譯程序,如何同時連接兩個庫文件,gcc命令應該怎麼寫。
-L後的應該是路徑,本例應該是-L/usr/lib/,-l後應該是庫的名字,注意,這里庫的名字是吧庫"libapi.so"去掉前面的"lib"和後面的".so",應該是-lapi.而且一個-L和-l對應一個庫.所以你的應該改為:
gcc -g -o test.exe test.c -L/usr/lib/ -lapi -L/usr/lib/ -lpk11.
還有,.exe文件是windows下的可執行文件格式,linux下不這么用,但是就本例而言也能運行.
Ⅳ c++中如何把類編譯成類似於庫文件,以後直接包含頭文件即可
使用兩個文件,一個為 文件名.h,一個為 文件名.cpp
文件名.h里這么寫:
#ifndef (這里隨便寫,最好是文件名)_FILE_H_
#define _FILE_H_
//類的聲明
#endif
文件名.cpp里這么寫
#include "文件名.h"
//類的實現
注意類的實現函數名前面加 類名::
編譯,編譯器只會編譯cpp文件。這時就可以通過包含h文件去使用類了。如果是其他工程使用,只需要拷貝obj文件和h文件就行了。
那個被編譯成了lib文件,放在了頭文件所在的include文件夾同層的lib文件夾下
Ⅵ c++中如何把類編譯成類似於庫文件,以後直接包含頭文件即可
請搜索「nmake makefile cl.exe lib」之類的關鍵字。
比如
-------------------------------
CL.exe
CL.exe是控制Microsoft C和C++編譯器與鏈接器的32位工具。編譯器產生通用對象文件格式(COFF)對象(.obj)文件。鏈接器產生可執行文件(.exe)或動態鏈接庫文件(DLL)。注意,所有編譯器選項都區分大小寫。若要編譯但不鏈接,請使用/c。使用NMAKE生成輸出文件。使用BSCMAKE支持類瀏覽。以下是一個完整的編譯器選項分類列表。
優化
選項 作用
/O1 創建小代碼
/O2 創建快速代碼
/Oa 假設沒有別名
/Ob 控制內聯展開
/Od 禁用優化
/Og 使用全局優化
/Oi 生成內部函數
/Op 改善浮點數一致性
/Os 代碼大小優先
/Ot 代碼速度優先
/Ow 假定在函數調用中使用別名
/Ox 使用最大優化 (/Ob1gity /Gs)
/Oy 省略框架指針
代碼生成
選項 作用
/clr 啟用C++的託管擴展並產生在公共語言運行庫上運行的輸出文件
/EH 指定異常處理模型
/G3 優化代碼以優選386處理器。在Visual C++ 5.0 中已經停用,編譯器將忽略此選項
/G4 優化代碼以優選486處理器。在 Visual C++ 5.0中已經停用,編譯器將忽略此選項
/G5 優化代碼以優選Pentium
/GB 與/G6等效;將_M_IX86的值設置為600
/Gd 使用__cdecl調用約定
/Ge 激活堆棧探測
/GF 啟用字元串池
/GH 調用掛鉤函數 _penter
/GL 啟用全程序優化
/Gm 啟用最小重新生成
/Gr 啟用運行時類型信息 (RTTI)
/Gr 使用__fastcall調用約定
/GS 控制堆棧探測
/GT 支持使用靜態線程本地存儲區分配的數據的纖程安全
/GX 啟用同步異常處理
/Gy 啟用函數級鏈接
/GZ 使用__stdcall調用約定
/MD 使用MSVCRT.lib創建多線程DLL
/MDd 使用MSVCRTD.lib 創建調試多線程DLL
/ML 使用LIBC.lib 創建單線程可執行文件
/MLd 使用LIBCD.lib 創建調試單線程可執行文件
/MT 使用LIBCMT.lib創建多線程可執行文件
/MTd 使用LIBCMTD.lib創建調試多線程可執行文件
輸出文件
選項 作用
/FA 創建列表文件設置列表文件名
/Fd 重命名程序資料庫文件
/Fe 重命名可執行文件
/Fm 創建映射文件
/Fo 創建對象文件
/Fp 指定預編譯頭文件名
/FR 生成瀏覽器文件
/Fx 將插入的代碼與源文件合並
……
鏈接
選項 作用
/F 設置堆棧大小
/LD 創建動態鏈接庫
/LDd 創建調試動態鏈接庫
/link 將指定的選項傳遞給LINK
/MD 使用MSVCRT.lib編譯以創建多線程DLL
/MDd 使用MSVCRTD.lib編譯以創建調試多線程DLL
/ML 使用LIBC.lib編譯以創建單線程可執行文件
/MLd 使用LIBCD.lib編譯以創建調試單線程可執行文件
/MT 使用LIBCMT.lib編譯以創建多線程可執行文件
/MTd 使用 LIBCMTD.lib 編譯以創建調試多線程可執行文件
……
……
……
更多的我就不貼出來了。。。msdn中對nmake作了詳細說明的。
下面一個nmake的makefile例子:
#命令
CC=cl.exe
DEL=del /Q /S
#頭文件與庫文件目錄
INCLUDES=
LIBS=
#編譯鏈接選項與宏定義
MT=MD ---------------(1)
DEFS=-DWIN32
MOD= ---------------(2)
#輸出文件
OUTPUT=test.exe
OBJS=main.obj
#內部變數
CFLAGS=/$(MT) $(INCLUDES) $(DEFS) /nologo
LINK=link $(MOD) /OUT:"$(OUTPUT)"
#依賴關系
all:$(OBJS)
$(LINK) $(OBJS)
main.obj:
$(CC) $(CFLAGS) main.cpp -Fo%|fF.obj
clean:
del /Q /S $(OBJS) $(OUTPUT)*
(1):
MD 使用MSVCRT.lib創建多線程DLL
MDd 使用MSVCRTD.lib 創建調試多線程 DLL
ML 使用LIBC.lib創建單線程可執行文件
MLd 使用LIBCD.lib創建調試單線程可執行文件
MT 使用LIBCMT.lib創建多線程可執行文件
MTd 使用LIBCMTD.lib創建調試多線程可執行文件
(2):
為空 生成可執行文件
/LIB 生成靜態鏈接庫
/DLL 生成動態鏈接庫
Ⅶ 關於整個編譯過程和庫文件的問題
1 ABD, 會載入到生成的可執行文件中
2 ABC, 不會載入到生成的可執行文件中
3 不是. 編譯器會有對應的選項去幫助你生成所需的文件, 比如
gcc a.c -shared -o a.dll -Wl,--output-def,a.def,--out-implib,liba.a
就可以給你生成個.dll
Ⅷ Qt下如何編譯庫
akefile文件。一般是qt里自帶的qmake工具。
首先先寫好cpp和頭文件,在當前目錄下依次執行qmake -project,qmake,make即可編譯。
另外,團IDC網上有許多產品團購,便宜有口碑
Ⅸ 如何將源文件編譯成庫文件
問題說的不是很清楚!
如果你是希望你編的函數能像庫函數那樣直接調用的話
可以把你的函數放到一個文件里
如果以後你那個程序需要這些函數時直接包含該文件就行了
像使用頭文件那樣#include"myfile.c"( 注意這里是用雙引號)
然後在你程序中就可以直接調用你自定義的函數了
如果我理解題目錯誤,敬請原諒!
【原創答人】