以下操作均在windows平台下;为3个工程,两个静态库工程static1和static2,static2调用static1;一个测试程序Test.1.static1工程,为静态库工程;
a.cpp如下:
  #include "StdAfx.h"
  #include"a.h"
  int sub(int a,int b)
  {
return a-b;
  }a.h如下:
  #ifndef URANUS_DENTRY
  #define URANUS_DENTRY
  extern "C"
  {
int sub(int a,int b);
  }
  #endif2.在static2工程中,并把a.h添加到该工程,a.lib拷贝到当前目录
c.cpp如下:
  #include "StdAfx.h"
  #include "b.h"
  #include "a.h"
  #pragma comment(lib,"a.lib")
  int abcd(int a,int b)           //static2调用static1
  {
return sub(a,b);
  }
c.h如下:
  #ifndef URANUS_DENTRY
  #define URANUS_DENTRY
  extern "C"
  {
int abcd(int a,int b);
  }
  #endif
3.在Test工程中,为控制台应用程序,并把b.h添加到该工程,b.lib拷贝到当前目录
Test.cpp如下:
  #include "stdafx.h"
  #include "b.h"
  #pragma comment(lib,"b.lib")  int main(int argc, char* argv[])
  {
//printf("Hello World!\n");
printf("100-10=%d",abcd(100,10)); return 0;
  }
问题:
1.但是在Test工程中中编译报错:
Linking...
Test.obj : error LNK2001: unresolved external symbol _abcd
Debug/Test.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.Test.exe - 2 error(s), 0 warning(s)用Test工程只调用一个static1静态库没问题;而static2调用static1,Test工程再调用一个static2静态库就会报上述错误。
2.
静态库中有没有DLLMAIN函数,自己可以添加DLLMAIN函数吗^_^首次写静态库 新手

解决方案 »

  1.   

    以下操作均在windows平台下;为3个工程,两个静态库工程static1和static2,static2调用static1;一个测试程序Test.1.static1工程,为静态库工程;
    a.cpp如下:
      #include "StdAfx.h"
      #include"a.h"
      int sub(int a,int b)
      {
    return a-b;
      }a.h如下:
      #ifndef URANUS_DENTRY
      #define URANUS_DENTRY
      extern "C"
      {
    int sub(int a,int b);
      }
      #endif2.在static2工程中,并把a.h添加到该工程,a.lib拷贝到当前目录
    b.cpp如下:  //蓝色为楼上写错了 更正一下啊
      #include "StdAfx.h"
      #include "b.h"
      #include "a.h"
      #pragma comment(lib,"a.lib")
      int abcd(int a,int b)           //static2调用static1
      {
    return sub(a,b);
      }
    b.h如下:
      #ifndef URANUS_DENTRY
      #define URANUS_DENTRY
      extern "C"
      {
    int abcd(int a,int b);
      }
      #endif
    3.在Test工程中,为控制台应用程序,并把b.h添加到该工程,b.lib拷贝到当前目录
    Test.cpp如下:
      #include "stdafx.h"
      #include "b.h"
      #pragma comment(lib,"b.lib")  int main(int argc, char* argv[])
      {
    //printf("Hello World!\n");
    printf("100-10=%d",abcd(100,10)); return 0;
      }
    问题:
    1.但是在Test工程中中编译报错:
    Linking...
    Test.obj : error LNK2001: unresolved external symbol _abcd
    Debug/Test.exe : fatal error LNK1120: 1 unresolved externals
    Error executing link.exe.Test.exe - 2 error(s), 0 warning(s)用Test工程只调用一个static1静态库没问题;而static2调用static1,Test工程再调用一个static2静态库就会报上述错误。
    2.
    静态库中有没有DLLMAIN函数,自己可以添加DLLMAIN函数吗^_^首次写静态库 新手
      

  2.   

    没找到abcd 这个函数...
    静态库中不用添加DLLMain()
      

  3.   


    abcd 这个函数 在static2工程中啊
    怎么解决啊
    静态库能调用静态库吗 我这样调用可以吗
    静态库中不用添加DLLMain() 那你的意思是 静态库自带有DLLMain() ;还是像动态库一样 可以自己添加 也可以不添加呢谢谢
      

  4.   

    abcd这个函数你是怎么写它的导出头的?
    是不是没写对?
      

  5.   

    两个静态库的编译选项要想同,既选择相同的runtime library,在项目属性里设置,否则就会出问题
    看你的描述感觉应当是这方面的问题
    试一下看能否有帮助
      

  6.   

    并且要求test工程的编译选项也必须是相同的
    好像我只有在使用静态库的时候遇到过这种问题
    但是似乎出现的error link比你的多很多
    希望多你有帮助
      

  7.   

    有没有把两个静态库都链接进EXE当中?