.dll与.lib的关系总结
環境:Win10 Vs2015 Debug+x64 新建一個C++的空項目 項目屬性里首先配置好目標類型(.dll),再配置輸出.lib和.dll的文件夾
?
?
?.dll文件需要有一個函數入口,DllMain(),只需要build即可得到需要.lib和.dll文件
//Function.h #pragma once extern "C" _declspec(dllexport) void test(); //Function.cpp #include"Function.h" #include <iostream> using namespace std; void test() {cout << "Hello World" << endl; } //TestDll.cpp #include<Windows.h> using namespace std; BOOL APIENTRY DllMain(HANDLE hModulce, DWORD ul_reason_for_call, LPVOID lpReaserved) {return TRUE; }.lib有兩種類型,一種是靜態鏈接庫(Static Link Library),它里面是函數實現的代碼,是編譯完很多個.obj的集合,使用時直接鏈接到主程序一起寫進.exe(.dll)中,還有一種是動態鏈接庫(Dynamic Link Library)的導入庫(Import Library),里面沒有實現的代碼,只有輸出方法的名字和其對應的地址,它和.dll配合使用(ps.即便是同一份代碼,在不同編譯器下可能有不同的地址)
尋找.lib的兩種方式,首先Vs在項目屬性VC++目錄里找到庫文件目錄以及鏈接器目錄里外部依賴項,然后就是以代碼的形式直接給出路徑
.dll即動態鏈接庫(Dynamic Link Library),是應用程序的拓展,和.exe配合使用,它是在運行時調用里面的方法才被加載進內存的,build生成.exe后(ps.不管找不找得到.dll,都可以生成成功),既能在系統變量里添加.dll的文件夾才能通過lib的名字找到它,也可以是在.exe同一級目錄下來找它
//test code #include<iostream> #include"D:\Vsproject\TestDLL\TestDLL\Function.h" #pragma comment(lib,"D:\\Vsproject\\TestDLL\\output\\lib\\TestDLL.lib") using namespace std; using namespace std; int main() {test();system("pause"); }?
轉載于:https://www.cnblogs.com/night-raid/p/11538258.html
總結
以上是生活随笔為你收集整理的.dll与.lib的关系总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线程了解以及创建线程的Threading
- 下一篇: 并发编程中的GIL锁(全局解释器锁)自己