关于.dll.a文件的几个小知识点

(1)

http://old.nabble.com/libstdc%2B%2B.dll.a:-No-such-file-or-directory(gcc-4.4.0)-td27186916.html

 

libstdc++.dll.a: No such file or directory(gcc-4.4.0)

 

Because d:/msys/mingw/lib/gcc/mingw32/4.4.0/libstdc++.dll.a does not exist. 

Try to hack d:/msys/mingw/lib/gcc/mingw32/4.4.0/libstdc++.la and change 

library_names to an empty string

 

 

(2)

http://www.cublog.cn/u1/52454/showart_1280627.html

 

This should create libACE.dll (the Win32 shared library) and libACE.dll.a (the Win32 import library for the DLL). 

 

 

(3)

http://www.cygwin.com/cygwin-ug-net/dll.html#dll-build

 

However, if you are building a dll as an export library, you will probably want to use the complete syntax:

 

gcc -shared -o cyg${module}.dll /

    -Wl,--out-implib=lib${module}.dll.a /

    -Wl,--export-all-symbols /

    -Wl,--enable-auto-import /

    -Wl,--whole-archive ${old_libs} /

    -Wl,--no-whole-archive ${dependency_libs}

The name of your library is ${module}, prefixed with cyg for the DLL and lib for the import library. 

Cygwin DLLs use the cyg prefix to differentiate them from native-Windows MinGW DLLs, see the MinGW website for more details. 

${old_libs} are all your object files, 

bundled together in static libs or single object files and the ${dependency_libs} are import libs you need to link against, 

e.g '-lpng -lz -L/usr/local/special -lmyspeciallib'.

 

 

(4)

http://zhangyafeikimi.javaeye.com/blog/404580

 

 

有了dll文件需要导出def文件: 

pexports zlib1.dll > zlib1.def 

 

有了dll和def文件,需要导出MinGW的.a文件: 

dlltool --dllname zlib1.dll --def zlib1.def --output-lib libz.dll.a 

 

有了dll和def文件,需要导出一个VC的lib文件: 

lib /machine:i386 /def:zlib1.def 

 

注意: 

C++的dll不具有2进制级别的共享性,也就是说VC的MinGW的C++ dll不能混用。 

而C的可以。 

pexports和dlltool的MinGW的工具,lib是VC的工具。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MSVC vs. MinGW 之 (lib,dll,def,obj,exe) vs (a,dll,def,o,exe) 玩转攻略手记 一份粗糙的研究记录,有待补完和整理。 MinGW: c -> o gcc -c a.c c -> exe gcc a.c libs.o -o a.exe (从主程序a.c,附加libs,生成a.exe) o -> exe gcc a.o b.o ... -o main.exe c -> dll,def,a gcc a.c -shared -o a.dll -Wl,--output-def,a.def,--out-implib,liba.a a -> dll a2dll liba.a dll -> a: dlltool --dllname a.dll --def a.def --output-lib liba.a (需要def文件) a -> def: dumpbin /exports lib.a > lib.def (在windows上调用,def需要修改) dll -> def : pexports a.dll -o > a.def (这里的-o是指给函数标序号) lib -> def : reimp -d a.lib lib -> a: (for __cdecl functions in most case) reimp a.lib; (for __stdcall functions) MSVC: c -> lib cl /LD a.c (注意已经定义了export列表) c -> dll cl /LD a.c c -> obj cl /c a.c c -> exe cl a.c /out:a.exe dll ->lib lib /machine:ix86 /def:a.def /out:a.lib (需要def文件) obj ->lib lib a.obj b.obj... /out:mylib.lib dll ->def DUMPBIN a.dll /EXPORTS /OUT:a.def (生成的def需要做修正) lib ->def reimp -d a.lib (这个要在MSYS+MinGW下用) 关于这些工具的适用范围可以很容易的理解和记忆。 dll和exe都是PE文件,所以可以使用pexports. lib和a是静态库文件,都是归档类型,不是PE格式。所以不能使用pexports. dll可以使用dlltool. lib可以使用lib, 和reimp(lib->a工具) 所有的bin文件,包括dll,exe,lib,a都可以使用dumpbin. 参考: http://hi.baidu.com/kaien_space/blog/item/5e77fafa2ba9ff16a8d3110a.html Mingw官网文档: http://www.mingw.org/wiki/MSVC_and_MinGW_DLLs http://oldwiki.mingw.org/index.php/CreateImportLibraries http://www.mingw.org/wiki/FAQ http://hi.baidu.com/opaquefog/blog/item/9b21b6deb324e25dccbf1ab7.html http://qzone.qq.com/blog/8330936-1238659272 http://hi.baidu.com/jzinfo/blog/item/b0aa1d308de99f9da8018e00.html 本篇测试用代码: 1. main.cpp #include #include #include "mylib.h" using namespace std; int main() { char str[]="Hello world!"; printhello(str); return 0; } 2. mylib.cpp #include #include #include "mylib.h" using namespace std; void EXPORT printhello(char *str) { cout << str << endl; } 3. mylib.h #define EXPORT __declspec(
### 回答1: jlink是一款常用的调试和烧录工具,同时也支持反汇编功能。使用jlink反汇编工具可以将目标设备中的代码转化为汇编语言,进而进行分析和调试。 jlink反汇编工具的使用需要jlink驱动支持,其中jlinkarm.dll是jlink驱动中的关键组件之一。为了实现更多的功能,有些开发者甚至对jlinkarm.dll进行了修改,从而增加更多的自定义功能和定制化操作。 自定义的jlinkarm.dll驱动文件可以用于不同的环境和需求,例如用于自动化测试、用于处理特殊类型的程序等等。不过,在使用自定义的驱动文件时需要注意一些安全问题,避免对目标设备的损害和意外发生。 总之,jlink反汇编工具及其修改后的jlinkarm.dll驱动文件是开发者日常工作中不可或缺的工具,能够帮助开发者更好地理解和处理目标设备中的代码,提高工作效率和开发质量。 ### 回答2: JLink反汇编工具是一款功能强大的反汇编软件,可用于分析和修改ARM芯片的代码。它能够读取和解析各种格式的ELF、COFF、S-record和Intel HEX文件。此外,它还支持标准的ARM和Thumb指令集,允许用户以汇编语言形式查看CPU的指令执行过程。 在使用JLink反汇编工具时,需要注意几点。首先,软件需要与JLink调试器配合使用,才能实现调试和烧录操作。其次,用户需要了解ARM芯片的指令集和寄存器结构,才能正确地解析和分析反汇编结果。最后,用户需谨慎使用修改功能,以免导致系统故障或数据损失。 针对JLink反汇编工具的修改,主要是对其驱动文件jlinkarm.dll进行优化和定制。通过修改驱动文件,用户可以增加或修改JLink调试器的功能,例如支持新的芯片型号、优化烧录速度、增加调试接口等。要修改驱动文件,需要具备一定的编程能力和相关知识,同时必须遵守软件使用和代码保护规定。 总之,JLink反汇编工具及其修改后的jlinkarm.dll驱动文件是ARM芯片开发和调试过程中的重要工具,用户可以根据需要选择合适的版本和配置,以提高工作效率和代码质量。 ### 回答3: jlink是基于ARM架构的仿真器,可以用于调试和开发处理器相关的程序。而反汇编工具是一种将二进制代码转化为汇编代码的工具。jlink反汇编工具就是针对jlink仿真器设计的反汇编工具。 jlink可以运行不同的固件,针对不同的处理器,而jlinkarm.dll驱动文件是jlink仿真器的驱动文件之一,用于加载不同的固件。这个驱动文件是可修改的,可以根据需要进行适当的更改。例如,可以修改驱动文件以支持新的处理器或新的调试接口,也可以修改驱动文件以添加一些调试功能。 但是需要指出的是,修改驱动文件可能会带来风险和不稳定性,可能会导致调试错误或设备故障。因此,建议只有在有经验并且遵循相关的安全措施的情况下,才尝试修改jlinkarm.dll驱动文件。 总的来说,jlink反汇编工具及其修改后的jlinkarm.dll驱动文件是对于ARM架构开发者非常有用的工具,在开发、调试、优化处理器相关的程序时,可以大大提高效率和准确性。但是,需要注意的是,使用这些工具需谨慎,尤其是在修改驱动文件时,需要谨慎操作,以避免不必要的风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值