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相关推荐
- linux 中gcc运行命令,Linux gcc命令的具体使用
01. 命令概述 gcc命令使用GNU推出的基于C/C++的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点. gcc是GNU编译器套件(GNU Compiler ...
- linux编译pcre生成动态链接库,Linux下编译安装PCRE库
最近在学习nginx,nginx rewrite依赖于PCRE库,所以需要在linux系统中编译安装PCRE库.具体步骤如下: 1.下载PCRE包 首先去官网下载pcre的安装包 如果通过FTP的方式 ...
- 编译linux内核生成.ko,Linux内核编译完整过程
通过网上的资料我自己的实际内核编译,我把对Linux内核编译的过程写在这里,也许对其他的Linux爱好者的编译学习有些帮助,其中很大部分是网上的资料,另外就是我在实际编译过程中的一些实际经验. 内核简 ...
- 动态链接库DLL创建及导出函数、调用DLL
1.动态链接库(dll)概述 没接触dll之前觉得它很神秘,就像是一个黑盒子,既不能直接运行,也不能接收消息.它们是一些独立的文件,其中包含能被可执行程序或其他dll调用来完成某项工作的函数,只有在其 ...
- dll找不到dll electron_如何在Electron中调用Dll
如何在Electron中调用Dll 客户端有些硬件的接口需要调试,是在电脑上连了一些硬件的设备,比如打印机.扫描仪或者进行串口通信等等.单靠JS是完成不了了,我们决定通过把C++或者C#把这些功能打包 ...
- python如何调用dll库中的函数_Python调用dll库接口-ctypes方法
背景 最近需要用python写个脚本程序(win10 环境),需要调用现成的dll库完成这项任务,对于一直在Linux平台上开发程序的本人来说,从没有过使用dll的经历(不得不说还是so大法好),遇到 ...
- matlab 查看dll的函数参数类型,MATLAB调用dll文件中的库函数时的变量类型匹配问题?...
我用MATLAB调用dll来进行USB数据采集运行 libfunctions USBAD -full 得到: Functions in library USBAD: [lib.pointer, vo ...
- linux编译gcc多久时间,Linux gcc编译参数说明
在linux中使用gcc编译程序时,若使用-g参数在程序中加入调试信息,则生成可执行文件的大小接近不加-g参数时的两倍. 1.-O,-O1: 这两个命令的效果是一样的,目的都是在不影响编译速度的前提下 ...
- java jna调用dll文件_关于java jna调用dll的问题
public interface User32 extends StdCallLibrary { User32 INSTANCE = (User32)Native.loadLibrary(" ...
最新文章
- python中可选参数_带可选参数的Python函数
- 最新综述:对话式检索数据集汇总
- 详解python的super()的作用和原理
- 第一百四十五节,JavaScript,同步动画
- UVAlive 6131 dp+斜率优化
- jpa存储byte到postgresql
- linux免密码登录
- MapReduce-深度剖析
- 面向对象编程思想---OOP
- (cf)Codeforces Round #807 (Div. 2)A--C思维题
- html怎么引用桌面图片,html怎么引入图片?
- MATLAB实现psf,C++实现Matlab的psf2otf函数
- 怎样用键盘控制电脑的光标
- 射频卡读写原理及实现
- 监听JScrollPane按PageUp,PageDown事件
- HDUOJ 6707 Shuffle Card
- Macbook GlobalProtect 连接问题
- python 关于元组的一些写法
- 大众点评数据信息获取——字体反爬
- ONVIF局域网搜索工具