日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

gcc生成dll linux,gcc编译dll和调用dll

發布時間:2024/4/14 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gcc生成dll linux,gcc编译dll和调用dll 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

方法一:

共有三個文件:print.h,print.c,test.c

***************************************************************

print.h: 文件內容

#ifndef PRINT_H

#define PRINT_H

#ifdef __cplusplus

extern?"?C?"?{#endif?//打印點東西

void Print(int iNum);#ifdef __cplusplus

}#endif

#endif

***************************************************************

***************************************************************

print.c: 文件內容

#include #include "print.h"

void Print(int iNum)

{

switch(iNum)

{

case 1:

printf("hello,this is 1/n");

break;

case 2:

printf("ok ,2 now/n");

break;

default:

printf("hihi,default now /n");

break;

}

getch();

return;

}

***************************************************************

***************************************************************

test.c:文件內容

#include #include "print.h"

int main()

{

printf("please print a num:/n");

int iNum = -1;

scanf("%d", &iNum);

Print(iNum);

return 1;

}

***************************************************************

編譯動態dll庫:

gcc -Wall -shared print.c -o print.dll

或者

gcc --share print.c -o print.dll

調用dll庫生成exe文件:

gcc test.c print.dll -o test

編譯靜態庫,可供windows調用:

1、gcc -shared -o print.dll print.c -Wl,--output-def,print.def,--out-implib,libprint.a

2、lib /machine:i386 /def:print.def

調用:vs2005

main.c

#include #include #include "print.h"

#pragma comment(lib,"print.lib")

int main()

{

Print(1);

system("pause");

return 0;

}

方法二:

兩個文件:Foo.c 和 Foo_test.c

***************************************************************

Foo.c:文件內容

#include #include

// 這就是按需加載的dll的主函數,dll被加載、卸載時,系統都回調用這個函數,通過dwReason判斷

BOOL WINAPI DllMain(HINSTANCE hModule, DWORD dwReason, LPVOID lpvReserved)

{

switch(dwReason) {

// 如果是進程加載本dll

case DLL_PROCESS_ATTACH:

printf("process attach/n");

break;

// 如果是進程卸載本dll

case DLL_PROCESS_DETACH:

printf("thread attach/n");

break;

// 如果是線程加載本dll

case DLL_THREAD_ATTACH:

printf("thread attach/n");

break;

// 如果是線程卸載本dll

case DLL_THREAD_DETACH:

printf("process attach/n");

break;

}

// 如果返回FALSE,則說明加載失敗,不會繼續被加載,也不可使用

return TRUE;

}

int foo(char *str)

{

printf("%s/n", str);

return 0;

}

***************************************************************

***************************************************************

Foo_test.c:文件內容

#include #include

typedef int (*FOO)(char *str);

int main()

{

HMODULE mod;

FOO???? foo;

mod = LoadLibrary("lib.dll");

printf("from main/n");

if((foo = (FOO)GetProcAddress(mod, "foo")) != NULL) {

foo("hello world");

}

FreeLibrary(mod);

getch();

return 0;

}

***************************************************************

編譯動態dll庫:

gcc -Wall -shared Foo.c -o Foo.dll

或者

gcc --share Foo.c -o Foo.dll

調用dll庫生成exe文件:

gcc Foo_test.c Foo.dll -o Foo_test

資料:

1、基于MSYS的Win32動態鏈接庫DLL開發:

總結

以上是生活随笔為你收集整理的gcc生成dll linux,gcc编译dll和调用dll的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。