方法一:

共有三个文件: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相关推荐

  1. linux 中gcc运行命令,Linux gcc命令的具体使用

    01. 命令概述 gcc命令使用GNU推出的基于C/C++的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点. gcc是GNU编译器套件(GNU Compiler ...

  2. linux编译pcre生成动态链接库,Linux下编译安装PCRE库

    最近在学习nginx,nginx rewrite依赖于PCRE库,所以需要在linux系统中编译安装PCRE库.具体步骤如下: 1.下载PCRE包 首先去官网下载pcre的安装包 如果通过FTP的方式 ...

  3. 编译linux内核生成.ko,Linux内核编译完整过程

    通过网上的资料我自己的实际内核编译,我把对Linux内核编译的过程写在这里,也许对其他的Linux爱好者的编译学习有些帮助,其中很大部分是网上的资料,另外就是我在实际编译过程中的一些实际经验. 内核简 ...

  4. 动态链接库DLL创建及导出函数、调用DLL

    1.动态链接库(dll)概述 没接触dll之前觉得它很神秘,就像是一个黑盒子,既不能直接运行,也不能接收消息.它们是一些独立的文件,其中包含能被可执行程序或其他dll调用来完成某项工作的函数,只有在其 ...

  5. dll找不到dll electron_如何在Electron中调用Dll

    如何在Electron中调用Dll 客户端有些硬件的接口需要调试,是在电脑上连了一些硬件的设备,比如打印机.扫描仪或者进行串口通信等等.单靠JS是完成不了了,我们决定通过把C++或者C#把这些功能打包 ...

  6. python如何调用dll库中的函数_Python调用dll库接口-ctypes方法

    背景 最近需要用python写个脚本程序(win10 环境),需要调用现成的dll库完成这项任务,对于一直在Linux平台上开发程序的本人来说,从没有过使用dll的经历(不得不说还是so大法好),遇到 ...

  7. matlab 查看dll的函数参数类型,MATLAB调用dll文件中的库函数时的变量类型匹配问题?...

    我用MATLAB调用dll来进行USB数据采集运行 libfunctions  USBAD -full 得到: Functions in library USBAD: [lib.pointer, vo ...

  8. linux编译gcc多久时间,Linux gcc编译参数说明

    在linux中使用gcc编译程序时,若使用-g参数在程序中加入调试信息,则生成可执行文件的大小接近不加-g参数时的两倍. 1.-O,-O1: 这两个命令的效果是一样的,目的都是在不影响编译速度的前提下 ...

  9. java jna调用dll文件_关于java jna调用dll的问题

    public interface User32 extends StdCallLibrary { User32 INSTANCE = (User32)Native.loadLibrary(" ...

最新文章

  1. python中可选参数_带可选参数的Python函数
  2. 最新综述:对话式检索数据集汇总
  3. 详解python的super()的作用和原理
  4. 第一百四十五节,JavaScript,同步动画
  5. UVAlive 6131 dp+斜率优化
  6. jpa存储byte到postgresql
  7. linux免密码登录
  8. MapReduce-深度剖析
  9. 面向对象编程思想---OOP
  10. (cf)Codeforces Round #807 (Div. 2)A--C思维题
  11. html怎么引用桌面图片,html怎么引入图片?
  12. MATLAB实现psf,C++实现Matlab的psf2otf函数
  13. 怎样用键盘控制电脑的光标
  14. 射频卡读写原理及实现
  15. 监听JScrollPane按PageUp,PageDown事件
  16. HDUOJ 6707 Shuffle Card
  17. Macbook GlobalProtect 连接问题
  18. python 关于元组的一些写法
  19. 大众点评数据信息获取——字体反爬
  20. ONVIF局域网搜索工具

热门文章

  1. 操作系统的实现(0)
  2. 从零开始写一个武侠冒险游戏-6-用GPU提升性能(1)
  3. oracle11g里sqldeveloper不能打开的问题
  4. 【CKFinder】解决上传中文名文件乱码和文件重命名的问题
  5. mysql 利用binlog增量备份,还原实例
  6. Use Case 和User Story
  7. 39道高级java面试题及答案(最新)
  8. C# Newtonsoft.Json 应用
  9. GitLab的安装及使用教程
  10. 【Spring学习】Spring JdbcTemplate之五类方法总结