mingw打dll ,lib包命令和调用
1,下面的命令行将这个代码编译成 dll。
gcc mydll.c -shared -o mydll.dll -Wl,--out-implib,mydll.lib
其中 -shared 告诉gcc dlltest.c 文件需要编译成动态链接库。-Wl 表示后面的内容是ld 的参数,需要传递给 ld。 --out-implib,dlltest.lib 表示让ld 生成一个名为 dlltest.lib 的导入库。
如果还需要 .def 文件,则上面的命令行可以写为:
gcc mydll.c -shared -o mydll.dll -Wl,--output-def,mydll.def,--out-implib,mydll.a
动态dll库调用
gcc -m32 -o Test Test.c mydll.dll
Test.c
#include"mydll.h"
#include"stdio.h"
#include<stdlib.h>
int main(){
printf("%d\n",add_range(,));
system("pause");
}
下面把我找到的一些信息也记录一下:
gcc 选项 -Wl:用于给链接器传递参数,
-soname:指定动态库的soname (Short for object name)
-output-def = <...> 产生与导出符号相关的def文件
-out-implib = <*.a> 产生用于提供__img_符号的 .a导入库,即*.a文件
def文件可以使用MinGW 附带的工具pexports生成,输入为dll文件,也可以使用VC附带的工具dumpbin 生成。
MinGW 附带的dlltool 工具可以将def 文件转化成 *.a文件。
2,vs静态 lib库调用
#include "..\lib.h"
#pragma comment(lib,"..\\debug\\libTest.lib")
3,在MInGW环境下编译和使用libcurl静态库
libcurl 7.21以后的版本在Windows下的编译比较简单,自带了MinGW和VC环境的Makefile文件,首先去Curl官网下载源代码:http://curl.haxx.se/download.html,任选一个下载即可,推荐这个: curl-7.21.2.tar.gz,下载完成后解压开,打开命令行进入curl源码目录,(在此之前请先设置好MinGW的环境变量): cd curl-7.21.2 编译libcurl库文件: cd lib make -f Makefile.m32 等待编译完成即可 编译curl可执行文件: cd ../src make -f Makefile.m32 一会儿就编译完成了
编译完成后,我们需要复制include头文件和库文件到一个目录供程序开发用
1. 新建curllib目录
2. 新建curllib/include目录,将源代码include目录里的curl文件夹复制到curllib/include目录,这些是使用libcurl需要的头文件 3. 新建curllib/lib目录,将源代码lib目录里编译好的库文件libcurl.a,libcurldll.a,libcurl.dll复制到curllib目录 4. 将MinGW安装目录下lib文件夹里的libwldap32.a和libws2_32.a复制到curllib/lib目录
至此,curllib就是我们开发中要使用到的libcurl的全部文件,下面新建一个测试程序,假设文件名为curltest.c,代码如下:
#include <stdio.h>
#include <curl/curl.h>
int main(void){
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl)
{curl_easy_setopt(curl, CURLOPT_URL, "www.baidu.com");
res = curl_easy_perform(curl);
/* always cleanup */
curl_easy_cleanup(curl);
}
return ;
}
方法一、命令行编译使用licurl的程序
假设测试代码curltest.c位于e:/project 假设curllib文件夹的位置为c:/curllib
1,命令行运行下列命令编译这个测试程序:
cd e:/project
gcc -I. -Ic:/curllib/include -g -O2 -DCURL_STATICLIB -c curltest.c
2,gcc -s -o curltest.exe curltest.o -Lc:/curllib/lib -lcurl -lwldap32 -lws2_32
这时可以看到curltest.c目录下生成了一个curltest.exe文件
接着在命令行输入: curltest.exe 如果看到命令行窗口输出一些HTML代码,就表示编译成功
方法二、Code::Blocks中使用libcurl静态库
1. 新建工程,在工程里添加代码同上的curltest.c文件
2. 将上面curllib/include目录下的curl文件夹复制到MinGW安装目录的include目录
3. 工程名上右键打开Build Options选项,在Compiler Settings选项卡下的#defines里面输入CURL_STATICLIB,(这表示使用静态库) 4. 在Linker Settings选项卡下面的link libraries里添加上面curllib/lib目录里的四个文件: C:\curllib\lib\libcurl.a C:\curllib\lib\libcurldll.a C:\curllib\lib\libwldap32.a C:\curllib\lib\libws2_32.a 然后回到工程页面,点击Build即可
今天为了编译和使用libcurl库折腾了一下午,记下来供需要的人参考,需要注意的是,本文中编译的是不带ssl和zlib支持的libcurl,如果需要编译支持ssl和zlib的curl,还需要先编译openssl,zlib和libssh,编译zlib比较简单,直接使用源码自带的makefile文件即可,编译openssl需要安装MSYS和Perl,还需要修改一些代码,libssh的编译依赖openssl,网上都可以找到方法,也可以看源码的README文件。
mingw打dll ,lib包命令和调用的更多相关文章
- Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参
Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参 一.打包 情况1:不需要向程序传参数,并且程序没有使用第三方jar包 Eclipse上导出jar: 然后选择一个java文件作为入 ...
- 如何编写Dll(用命令行编译加深理解)
DLL的优点 简单的说,dll有以下几个优点: 1) 节省内存.同一个软件模块,若是以源代码的形式重用,则会被编译到不同的可执行程序中,同时运行这些exe时这些模块的二进制码会被重复加载到内 ...
- MSVC vs. MinGW 之dll玩转攻略手记【转
一份粗糙的研究记录,有待补完和整理. MinGW:c -> o gcc -c a.cc -> exe gcc a.c libs.o -o a.exe ( ...
- Python一键转Jar包,Java调用Python新姿势!
粉丝朋友们,不知道大家看故事看腻了没(要是没腻可一定留言告诉我^_^),今天这篇文章换换口味,正经的来写写技术文.言归正传,咱们开始吧! 本文结构: 需求背景 进击的Python Java和Pytho ...
- VB6 实现命令行调用时附着到原控制台
Public Declare Function AttachConsole Lib "kernel32.dll" (ByVal ProcessID As Integer) As B ...
- MinGW编译dll并引用
记得某位神仙曾经说过:一个项目不使用dll简直是一场灾难.(滑稽) 这篇文章以A+B/A-B为范例,来介绍如何在MinGW下编译dll并引用. 首先你要安装MinGW,并配置好环境变量(不配置环境变量 ...
- tcpdump抓包命令
本文转自 : http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html http://www.itshouce.com.cn/l ...
- 探索C++的秘密之详解extern "C",这就是为什么很多.lib被我们正确调用确总是无法解析的。
(转载,绝对的有用) lib被我们正确调用确总是无法解析.这是C++编译和C编译的区别 时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus extern "C&qu ...
- 获取DLL的文件路径以及调用DLL的文件路径
如何在DLL中,获取DLL本身的路径以及调用DLL的文件的路径呢?主要通过GetModuleFileName(HMODULEhModule,LPTSTR lpFilename,DWORD nSize) ...
随机推荐
- 《阿里巴巴Android编码规范》阅读纪要(一)
版权声明:本文出自汪磊的博客,转载请务必注明出处. 2月28日阿里巴巴首次公开内部安卓编码规范,试想那么多业务线,开发人员,没有一套规范管理起来是多么麻烦,以下是个人阅读Android基本组件部分过程 ...
- 使用Ant打包Java后台程序
概述 本文通过一个简单的Java Application例子描述如何用ANT完成基本的程序打包工作.包含文件拷贝.编译.打包三部分:完成这三部就可以得到一个可运行的程序包了. ANT的安装,环境变量的 ...
- Hadoop体系架构简介
今天跟一个朋友在讨论hadoop体系架构,从当下流行的Hadoop+HDFS+MapReduce+Hbase+Pig+Hive+Spark+Storm开始一直讲到HDFS的底层实现,MapReduce ...
- Cocos2d-x 集成openinstall(Android)
目的: 1. Cocos2d-x集成openinstall sdk? 有这么一个场景,甲给乙分享了链接,乙使用并下载APP,推荐者甲和乙的关系这个思路是怎样的? 你首先想到的也许会说,那当然就是给对方 ...
- java抽象类注意问题
当知道一个类的子类将不同的实现某个方法时,把该类声明为抽象类很有用,可以共用相同的父类方法,不必再定义. 抽象类和抽象方法的关系:含有抽象方法的类一定是抽象类,抽象类里不一定含有抽象方法. 抽象类存在 ...
- 转: web 页面加载速度优化实战-100% 的飞跃提升
前言 一个网站的加载速度有多重要? 反正我相信之前来 博主网站 的人至少有 50% 在加载完成前关闭了本站. 为啥捏? 看图 首页完整加载时间 8.18s,看来能进来看博主网站的人都是真爱呀,哈哈. ...
- php后台开源框架
1,OneBase 官网首页:https://onebase.org 后台演示:https://demo.onebase.org/admin.php 接口演示:https://demo.onebase ...
- 关于Oracle-SQL语句性能优化
Oracle-Sql语句性能优化 相信许多从事几年的开发人员都有过一些经验,相对于刚出来的毕业生而言,对于同种操作sql结果,他们的代码性能会更高一些.虽然本人还是个实习生,在这还是写写自己 ...
- 自动识别移动端还是PC端
平时在开发中经常会遇到这样的需求,除了开发PC端之外,还会同时开发移动端.对于简单的页面,可以使用bootstrap之类的框架实现响应式页面,可是当页面很复杂的时候,就需要开发一个移动端页面,一个PC ...
- linux新建用户登录不了
useradd----创建用户命令 简单的创建普通用户(当然得在root登录下执行) useradd username -p password userdel username 删除用户 用上面的命令 ...