Windows平台利用MinGW编译DLL库

16450阅读 0评论2013-12-18 AoyamaRyo
分类:嵌入式

Windows平台利用MinGW编译DLL

AuthorAoyamaRyo

EMail 

      

 

 

 

说明

限于笔者水平,文中谬误之处,敬请告知笔者,不胜感激。

前言

若一个交付用户的产品由嵌入式端、通用微机组成,微机端软件通常使用微软平台开发(运行),而嵌入式端可能由GNU平台开发。在处理某些数据时最好使用相同的程序库,这就需要编译相应库(Unix-like C工程)的Windows版本。以编译libopencore-amrnb-0.dll为例,本文演示如何利用MinGWMSYSVisual Studio 2010搭配完成该任务。

 

假定读者对GNU编译工具链稍有了解。

一、准备编译环境及源码

1)MinGW(Minimalist GNU on Windows)

该项目提供了方便的安装工具,其下载地址为:

 

运行该安装程序,会从网络自动下载安装文件。

在第3步选择“Download latest repository catalogues”
    选择安装路径:本文安装路径为“D:\MSYS”。
    在“Select Components”步骤中选择:
      √  C Compiler (默认且一定选择)
      √  C++ Compiler
      √  MSYS Basic System(选择此项将会安装msys,msys则不需要另外安装)
      √  MinGW Developer ToolKit

安装完成后,已包含MSYS。

 

2)准备opencore-amr源码

其下载地址为:

当前(2013.12.18)版本为opencore-amr-0.1.3,也是项目中基站使用的版本。

本文源码存放目录为:“D:\opencore-amr-0.1.3”。

 

3)安装Visual Studio 2010

过程略。本文的安装路径为“D:\Program Files (x86)\Microsoft Visual Studio 10.0”。

二、配置参数并编译动态链接库

1)编辑“D:\MSYS\msys\1.0\msys.bat”,在文件的开头加入如下一行:
    call "D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat"

 

2)运行“D:\MSYS\msys\1.0\msys.bat”,

cd /d

cd opencore-amr-0.1.3

./configure --prefix=D:/MSYS/msys/1.0/local
    make
    make install
    D:\MSYS\msys\1.0\local存放编译后得到的文件。

得到DLL库文件:libopencore-amrnb-0.dll、libopencore-amrwb-0.dll。

3)在D:\MSYS\msys\1.0\local\bin目录中执行:

pexports.exe libopencore-amrnb-0.dll > libopencore-amrnb-0.def

 

4)将“D:\Program Files\Microsoft Visual Studio 10.0\VC\bin\”目录下的lib.exe、 link.exe以及“D:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\” 目录下的mspdb100.dll复制到“D:\MSYS\msys\1.0\local\bin”目录(目标库所 在目录)。

执行:

lib.exe /machine:i386 

/def:libopencore-amrnb-0.def /out:libopencore-amrnb-0.lib

 

备注:

实践得知,第二步编译出的dll文件不能用于VC++编译器(故而有了第三、第四步)。编译得到的libopencore-amrnb.a可供MinGW编译器(Win7)调用。

VC++编译与MinGW GCC编译器使用的动态库格式有差异。恐怕有更准确的配置方法笔者尚不清楚。

第三步导出符号表,第四步生成lib库,在VC++工程中调用lib库,转由该库调用dll动态库。

 

三、调用测试

使用Visual Studio 2010创建VC++工程,并对库路径进行配置(非本文要点,过程从略)。

编写测试代码,编译工程,将libopencore-amrnb-0.liblibopencore-amrnb-0.dll复制至程序所在目录(或其他链接库搜索路径),执行如下图:

上一篇:没有了
下一篇:错误码管理模块的应用