當前位置:首頁 » 編程軟體 » vc自製動態庫編譯器

vc自製動態庫編譯器

發布時間: 2022-08-09 17:18:11

① vc++6.0編譯

#include<iostream.h>//你這里錯了。把#inlcude<iostream.h>寫成#include<iostream.>
#include"Sales_item.h"
main()
{
Sales_item book;
std::cin>>book;
std::cout<<book<<std::endl;
return 0;
}
改後如果還有錯誤,請你把全部代碼發在上面。代碼補全才能知道你那裡錯了!!!

② VC程序調用動態庫,編譯時候也跟著編譯動態庫

不太清楚你的工程是如何建立的,想必一個工程是生成動態鏈接庫,另一個是調用程序EXE了。由於VC動態庫有兩種形式,Regular和Extended兩種,其中一種能導出類,另一種只能導出變數和函數。如果導出的是類,你在編譯EXE文件時自然需要用到類得聲明文件,即你前面所說的動態庫本身所引用的文件。如果導出的是函數或變數,有可能出現的情況是:一般為了代碼的重用性,把需要導出的函數或變數單獨放在一個頭文件中,用一個宏控制其導入、導出。編譯動態庫時,宏定義為導出,編譯EXE時,宏變為導入,這個頭文件為兩者共用。如果不小心在這個頭文件中包含了其他頭文件,也可能出現你說的情況。如果動態庫調用直接採用函數入口地址的方法,則什麼都不用聲明,當然,只適用於導出函數與變數的情形。

③ 使用VC++2008編譯exosip的動態庫文件dll遇到無法解析的外部符號問題。

產生這些錯誤是因為需要用到的一些函數在osip庫在def文件中沒導出。需要修改\libosip2-3.6.0\platform\vsnet目錄下面的osip2.def、osipparser2.def兩個文件,在文件的末尾導出這些函數,具體如下:
osip2.def:
osip_transaction_set_naptr_record @138

osipparser2.def:
osip_realloc @416
osip_strcasestr @417
__osip_uri_escape_userinfo @418

④ 如何在vc中使用mingw編譯出來的動態庫和靜態庫

mingw編譯出來的靜態庫後綴名為.a,編譯出來的動態庫的導入庫後綴名為.dll.a,而在windows下後綴名為.lib的庫可能是靜態庫也可能是動態庫的導入庫。

mingw編譯出來的動態庫的導入庫可以直接在vc中直接使用,例如

#pragma comment(lib, "libx264.dll.a")

這樣你就不需要生成一個.lib後綴的動態庫的導入庫了,網上也有如何從.dll生成.lib的方法。

如果鏈接了動態庫的導入庫libpthread.dll.a,你發布的應用程序就要帶上pthread的dll。
使用靜態庫的好處是發布的應用程序組件模塊里不需要帶上相關的dll,如果要使用mingw編譯出來的靜態庫,可以如下:

#pragma comment(lib, "libx264.a")

但是僅僅鏈接這么一個靜態庫是不夠的,你還需要鏈接

libgcc.a

libmingwex.a

你可能還需要鏈接libmsvcrt.a

否則會報一堆錯誤:error LNK2001: 無法解析的外部符號

上面的這些庫在C:\MinGW\lib目錄或子目錄下面可以找到。

鏈接這些庫的原因是mingw使用的gcc編譯器和vc編譯器之間存在差異

⑤ 怎樣讓vc++6.0生成64位的動態鏈接庫

1.靜態鏈接庫與動態鏈接庫區別:靜態鏈接庫:lib中的指令被直接包含在最終生成的EXE文件中。動態鏈接庫:dll不必被包含在最終的EXE中,EXE文件執行時可以動態地引用和卸載DLL文件。同時,靜態鏈接庫中不能再包含其他的動態鏈接庫或靜態庫,而動態鏈接庫中可以包含其他的動態或靜態庫。2.VC++支持的DLL:DLL的編制與具體的編程語言及編譯器無關,動態鏈接庫隨處可見,VC++支持三種DLL:非MFC動態庫、MFC規則DLL和MFC擴展DLL。DLL導出函數(或變數、類)可供應用程序調用;DLL內部函數只能在DLL程序內使用,應用程序無法調用它們。3.導出函數的聲明方式:一種在函數聲明類型和函數名之間加上「_declspec(dllexport)」。另外一種採用模塊定義(.def)文件聲明,需要在庫工程中添加模塊文件,格式如下:LIBRARY 庫工程名稱EXPORTS 導出函數名4.DLL的調用方式:一種靜態調用,由編譯系統完成對DLL的載入和應用程序結束時DLL的卸載。另外一種動態調用,由編程者用API函數載入和卸載DLL(DLL載入—DLL函數地址獲取—DLL釋放)方式。5.所有庫工程編譯時必須Release方式:Build—set active configuration—選擇庫工程的release方式6.示例:一、 函數----創建動態鏈接庫(MFC規則DLL)1. New--projects--MFC AppWizard(dll)--Regular DLL using shared MFC DLL //取名為MFC_dll2. def文件中添加:函數名(Add_new)3. h文件中添加:外部函數聲明//求和函數,函數名為Add_newextern "C" __declspec(dllexport) int __stdcall Add_new(int a,int b);4. cpp文件中添加: 外部函數實現extern "C" __declspec(dllexport) int __stdcall Add_new(int a,int b){return a+b;}5. build--set active configuration--win32 release--ok6. 生成7. 根目錄下release文件夾中dll,lib與根目錄下h文件即為所需二、 函數----調用動態鏈接庫(把MFC_dll.dll和MFC_dll.lib拷到工程所在目錄)//靜態調用(.h可以寫到.cpp文件中)1. new--projects--win32 console application--an empty project2. 添加h文件:(test.h)#pragma comment(lib,"MFC_dll.lib") //告訴編譯器DLL相對應的lib文件所在路徑和文件名extern "C" _declspec(dllimport) int _stdcall Add_new(int a,int b);//聲明導入函數3. 添加cpp文件:(main.cpp)#include "test.h"int main(){cout<<Add_new(10,3);return 0;}//動態調用#include <stdio.h>#include <windows.h>typedef int (* lpAddFun)(int ,int);//定義一個與Add_new函數接受參數類型和返回值均相同的函數指針類型int main(){HINSTANCE hDll;//句柄lpAddFun addFun;//函數指針hDll=LoadLibrary("dllTest.dll");//動態載入DLL模塊句柄if(hDll){addFun=(lpAddFun) GetProcAddress(hDll,"Add_new");//得到所載入DLL模塊中函數的地址if(addFun){int result=addFun(2,3);printf("%d",result); } FreeLibrary(hDll);//釋放已經載入的DLL模塊}return 0;}三、 變數----創建動態鏈接庫(非MFC DLL)1. new---projects---win32 dynamic-link library----an empty project(Sample)2. 添加sample.h#ifndef SAMPLE_H#define SAMPLE_Hextern int dllGlobalVar;#endif3. 添加 sample.cpp#include "sample.h"#include <windows.h>int dllGlobalVar;bool APIENTRY DllMain(HANDLE hMole,DWORD ul_reason_for_call,LPVOID lpReserved)//windows在載入DLL時,需要一個入口函數,就如同控制台或DOS程序需要main函數、win32程序需要winmain函數一樣。所以引入一個不做任何操作的預設DllMain的函數版本。是DLL的內部函數。

⑥ VC 編寫動態庫 dllmain問題

函數錯誤
add.cppG:\實踐\ DLL\ add.cpp(8):錯誤C2146:語法錯誤:缺少';'在標識符「APIENTRY'G的:\實踐\ DLL\補充。 CPP(8):錯誤C2501:「BOOL」:缺少0存儲類或類型specifiersG的:\實踐\ DLL\ add.cpp(8):致命錯誤C1004:意外結束文件foundError執行cl.exe.add.obj的的

⑦ VC 自己編寫動態庫鏈接時出現問題

1:
extern int dllGlobalVar;意思是說這個全局變數是在外部定義的
2:
目測你是從網上直接的代碼吧,有可能是含有不可見的特殊字元了,你可以刪除沒行行尾的所有字元,或者你自己照著這個手打一次,保證沒錯誤了。

⑧ c++動態鏈接的聲明和實現函數 怎麼做成動態鏈接庫

你要建立dll的工程項目,如果是建立動態鏈接庫的話,我可以發給你一個模板,請參考。
.cpp
#define DLL_ALGRATHM
#include "algrithmdll.h"

//從內存中讀取圖像數據
DLL_API IplImage* WINAPI loadimage( char* data,float width,float height)
{

}
.h文件

#pragma once;
#ifdef DLL_ALGRATHM
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
#include <Windows.h>extern "C" {
DLL_API IplImage* WINAPI loadimage(char* data,float width,float height);
}

熱點內容
21款發現5哪個配置透明引擎蓋 發布:2024-04-23 21:20:18 瀏覽:871
adb拷文件夾 發布:2024-04-23 21:12:25 瀏覽:8
如何破解wmv加密視頻 發布:2024-04-23 21:11:44 瀏覽:556
安卓拍抖音怎麼把聲音錄進去 發布:2024-04-23 20:58:51 瀏覽:846
安卓fifa15怎麼恢復數據 發布:2024-04-23 20:58:42 瀏覽:242
卸載oracle資料庫 發布:2024-04-23 20:36:26 瀏覽:521
發帖站源碼 發布:2024-04-23 20:22:45 瀏覽:682
小豚攝像頭存儲卡滿了怎麼辦 發布:2024-04-23 20:04:41 瀏覽:232
我的世界伺服器管理應該做什麼 發布:2024-04-23 19:37:19 瀏覽:146
伺服器是如何處理多個用戶的請求 發布:2024-04-23 19:35:26 瀏覽:957