用Visual C++, 整个项目里,一些.c文件要保密,所以想把对应的obj打包成lib,如何打包,又如何把这个生成的lib加到vc工程里?

解决方案 »

  1.   

    你建立一个WIN32 static library工程,
      

  2.   

    怎么建立,Workspace里建立一个Win32 static library工程,里面放我不公开的代码,然后同一个workdspace里再添加一个公开代码的工程?
    有没有简单办法,根据obj,用某个命令行生成lib
      

  3.   

    怎么建立,Workspace里建立一个Win32 static library工程,里面放我不公开的代码,然后同一个workdspace里再添加一个公开代码的工程? 
    有没有简单办法,根据obj,用某个命令行生成lib
    =============
    Win32 static Library工程编译之后不就生成了LIB文件了,然后在别的地方用这个文件就是了,用法和库函数一样
      

  4.   

    你创建了Win32 静态库之后编译好生成的就是lib文件。
      

  5.   

    lib是编译生成的,不是放进去的
      

  6.   

    我没说清楚。举个例子
    问题1。#include <stdio.h>之后,就可以用printf()函数,这个printf函数是在某个lib里面的。
    我现在的问题是,我有一个lib,怎么处理(lib文件放在哪里,vc里要怎么操作),才能在我的代码里用
    #include "mylib.h" 然后代码里用调用lib里的函数.问题2。我目前有一些.c文件编译后生成的.obj,而且只有这些文件,我把这些.obj放到我的工程里,就可以用这些函数了,但是.obj文件太多了,我想把这些.obj文件打包成一个文件,比如mylib.lib,怎么操作。
      

  7.   

    可以用的
    Project->Add to Project->Files选中obj添加进来,就可以删除掉对应的.c文件,编译连接能通过。
    现在是obj文件太多了,我要打包成一个文件,和头文件一起发给他人,怎么打包,拿到这个lib后,怎么添加到工程里.
      

  8.   

    obj文件没用的,不能拿过来用
    如果是Lib文件的话,有2种方法,一是通过#pragma comment(lib,"yourlib.lib")写在你的代码开头处,而是在IDE的VC++目录的库文件搜索路径中进行设置,那么当你用到的时候,IDE会自动将那个lib拿进来进行编译
      

  9.   

    1. #pragma comment(lib,"mylib.h")或者项目设置中的link中引入mylib.lib
    2. Copy(link.exe lib.exe *.obj文件)到新文件夹,写个批处理lib *.obj /out:all.lib,运行就生成了
    (2步骤可能提示找不到dll, 搜索拷贝到文件夹就可以了)
      

  10.   


    回去试一下再说吧,我不会生成lib,一直都用obj.
      

  11.   

    更改下pragma comment(lib,"mylib.lib")
      

  12.   

    #pragma comment(lib,"yourlib.lib")
    这个确实是比较常用的方法,在vs2008中还可以在Project->properties->Configuration Properties
    ->Linker->Input->Additional Dependencies->添加相应lib,例如:
       $(SolutionDir)lib\xxx.lib
      

  13.   

    1.你直接把编译出来的.lib文件加到工程里面,
    然后把lib相关的.h文件全部加入到工程里就解决了你的问题了。
    在link的时候,可以自动找到这个lib中的函数并且链接进去。
    2.生成lib的方法就是“你建立一个WIN32 static library工程”
    然后把所有的obj文件都加入这个工程,之后直接编译就行了。到debug目录下找到那个lib文件,再按照1操作就可以了。
      

  14.   

    长了知识,我真的没用过obj文件,obj文件应该是编译后的文件,链接程序用的,原来可以和LIB文件一样用。
    不过好像用obj文件的很少吧,还是用LIB吧。
      

  15.   

    在工程的配置里面直接设置生成lib文件啊,这样别人拿到头文件和lib文件就可以链接你的代码了,也不用担心泄露源代码
      

  16.   

    (1)lib是编译时需要的,dll是运行时需要的。 
    如果要完成源代码的编译,有lib就够了。 
    如果也使动态连接的程序运行起来,有dll就够了。 
    在开发和调试阶段,当然最好都有。 
    (2)一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。 
    (3)在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是DLL文件,引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的函数的内存地址,这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。从上面的说明可以看出,DLL和.LIB文件必须随应用程序一起发行,否则应用程序将会产生错误。