程序是这样的:主程序需要用到三个DLL,三个DLL分别为:A.DLL:使用了很多第三方静态LIB和几个自己写的静态LIBB.DLL:使用A.DLL和一些自己写的静态LIBC.DLL  使用A.DLL和B.DLL以及一些自己写的静态LIB三个DLL都有代码,程序运行时需要动态链接这三个DLL文件。现在想把这三个DLL做成一个静态的LIB,也就是把A.DLL, B.DLL, C.DLL合并成为一个ABC.LIB供程序调用,这样编译生成的程序就可以不需要依赖任何DLL文件了。请问技术上可行吗?我已经研究了好几天也,没有实现。请高手帮忙解决,谢谢!

解决方案 »

  1.   

    这个当然可行,不过前题是你要有第3方静态库的源码 否则的话就最少也要有2部分(你的代码的LIB和第3方的LIB)。
      

  2.   

    这样资源重复引入会报错的,在编写dll的时候只要加路径就可以了,附加依赖库全部清掉,因为dll不做连接处理。如果有同样资源,在调用时exe会报错,因为同样的数据,exe怎么知道去调用哪一个dll中的数据呢?
      

  3.   

    把A,B,C的代码重新整理一下,重复的去掉,然后都加入到静态库的工程,然后生成静态库.
      

  4.   

     可行,曾经做过类似的工作。出现库函数引入重复的时候,再 连接 的CommandLine中添加
    /FORCE:MULTIPLE就可以强制只连接一个函数。。有错误把错误代码贴上来。。
      

  5.   

    第三方静态LIB没有源码,只有自己的三个DLL有源代码。请问将三个DLL编译成一个LIB,程序运行时引用第三方LIB+自己生成的LIB,能否通过呢?
      

  6.   

    如果自己的三个dll里面没有重复的extern函数,是非常简单的:
    1、建立一个静态库项目,合并目标项目文件(包括资源)到本项目中,处理冲突。
    2、合并dllmain, 并提供统一的初始函数和结束函数来代替dllmain。
    3、处理各种冲突。