• Qt下使用的静态链接库------ *.lib转化为mingw使用的.a格式的静态库


    使用MinGW附带的工具reimp.exe,该工具一般在MinGW in目录下,其readme文档在MinGWdoc eimp目录下,

    方法很简单,比如:

    C:CodeBlocksMinGWlibdx9>reimp d3d8.lib

    就会生成一个“libd3d8.a”文件,这个文件就可以让基于MinGW的编译器链接使用了。

    我用这个方法成功的把DirectX9c的.lib库转化成了.a库,并在CodeBlocks下编译成功了其生成的dx项目,

    但是有三个.lib文件无法通过这个方法转换:DxErr.lib、DxErr8.lib、DxErr9.lib,估计其他方法,

    但似乎没有他们也不影响DX9c库的使用,先这样,需要的话再想办法吧。

    还有一个办法,来源是:

    http://topic.csdn.net/t/20040721/11/3195357.htm

    不知道是否可行,可以试试。

        GCC和VC都使用COFF格式,所以VC中的.obj .lib与gcc用的.o .a是一样的(在WINDOWS下),只是扩展名不一样,通常你只要改一下名称就OK啦!不过有些库不行,因为库中的代码可能会用到一些编译器专有的特性,用VC做的.lib可能在gcc下没法通过编译(缺少符号),反之亦然。

    reimp的readme文档内容如下:

    README for reimp
    ================

    * Overview

    `reimp' is a tool to convert Microsoft's new-style (short) import
    libraries to import libraries for win32 ports of GNU tools (mingw32,
    cygwin).

    `reimp' reads an MS import library and writes all imports to the
    corresponding .DEF file(s) that it feeds to `dlltool' that creates the
    import library.


    * Invocation

    Usage: reimp [options] IMPLIB

    Options:
    -s, --dump-symbols      dump symbols to stdout
    -d, --only-def          only create .def files
    -c, --keep-case         keep case in lib*.a file names
    --dlltool         use for dlltool
    --as              use for assembler

    The `--dump-symbols' option makes `reimp' use a quick method for
    finding imported symbols and sending the names of found symbols to
    stdout. If the input library contain non-imported symbols they will be
    listed as well. The output symbols will have all decoration preserved
    (i.e '_' will prefix most symbols), so if you feed it to dlltool you
    should strip leading underscores. For example

            echo EXPORTS > imp.def
            reimp imp.lib | sed 's/_//' >> imp.def
            dlltool -k --def imp.def --output-lib libimp.a --dllname imp.dll

    The `--only-def' option makes `reimp' stop after generating the .DEF
    file(s).

    By default `reimp' converts all output library names to lower-case. By
    using the `keep-case' option `reimp' will use exactly the case of the
    DLL imported from when creating an import library. KERNEL32.dll will
    generate libKERNEL32.a and not libkernel32.a as it would be default.


    * Notes on mixed libraries

    If an input library contain regular objects (non-imports, i.e code and
    data) `reimp' will write out those objects unless you specify one of
    the `--only-def' and `--dump-symbols' options. You probably want to
    include those objects as well in the generated library. `reimp'
    doesn't do that automatically so you have to do it manually using
    `ar', like this

            reimp imp.lib          # this generates several .o or .obj files.
            ar rcs libimp.a *.obj # add them to library


    * Contact information

    如果没有reimp,下载

    http://download.csdn.net/detail/viewlolcs/8197589

    或下载mingw-utils 
    http://sourceforge.net/projects/mingw/files/MinGW/Utilities/mingw-utils/mingw-utils-0.3/mingw-utils-0.3.tar.gz/download

    下载mingw-utils-0.3.tar.gz,解压,将其中的reimp copy至MinGW的bin目录下。

    使用reimp和dlltool
    进入cmd下
    cd c:/mysql/lib/opt

    reimp -d libmysql.lib

    dlltool -k -d libmysql.def -l libmysql.a

    参考文章:

    Stdcall and DLL tools of MSVC and MinGW

     
    还有另外一种说法,供参考:

    mingw中没有reimp.exe、dumpbin.exe、pexports.exe

    2014-09-19 20:01YAWANGZHIWEN | 浏览 721 次
    我下载了mingw4.6.2并安装好,但是里面缺少好些执行文件,比如题目中所说的几个,哪位大哥能把bin下面完整的exe文件发送一份啊,感激不尽。
    请发送至403929665@qq.com
     
    举报| 2014-09-19 21:06 提问者采纳
     
    1. reimp已过时,mingw4.6.2中lib和vc的lib是通用的。

    2. dumpbin和pexports是vc专有的,mingw本身就没有 不过有其它可代替的工具。

    追问:
    那我也安装了VS,为什么在命令行里面调用的时候提示,reimp不是外部或内部命令之类的话啊?
    追答:
    reimp已经取消了啊,没有这个东西了。只有老版本的mingw才有。现在mingw可以直接使用vc的lib。
    追问:
    那您可不可以告诉我生成.so文件用的什么命令啊。
    看之前的帖子就用到刚刚说的那些命令。之前没有接触过这些东西。
    追答:
    mingw现在生成的是通用dll  直接编译成dll即可,这个没变。
    g++.exe -c md5dllmain.cpp -o md5dllmain.o -I"C:/Programming/MinGW/include"  -DBUILDING_DLL=1 
    dllwrap.exe --output-def libmd5dll.def --driver-name c++ --implib libmd5dll.a md5dllmain.o  -L"C:/Programming/MinGW/lib" --no-export-all-symbols --add-stdcall-alias  -o md5dll.dll
    以上是个例子。
    提问者评价
    谢谢!


    http://blog.csdn.net/libaineu2004/article/details/47783637
  • 相关阅读:
    FastAPI(5)- 查询参数 Query Parameters
    FastAPI(4)- 路径参数 Path Parameters
    FastAPI(3)- uvicorn.run()
    Python
    Python
    Python
    Python
    Python
    Python
    Python
  • 原文地址:https://www.cnblogs.com/findumars/p/4886486.html
Copyright © 2020-2023  润新知