静态库调用静态库

ILoveCLanguage 2009-04-01 06:17:05
以下操作均在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);
  }
  #endif



2.在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函数吗

^_^首次写静态库 新手
...全文
446 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
僵哥 2009-04-02
  • 打赏
  • 举报
回复
有没有把两个静态库都链接进EXE当中?
  • 打赏
  • 举报
回复
应该编译选项上的link问题
dch4890164 2009-04-02
  • 打赏
  • 举报
回复
并且要求test工程的编译选项也必须是相同的
好像我只有在使用静态库的时候遇到过这种问题
但是似乎出现的error link比你的多很多
希望多你有帮助
dch4890164 2009-04-02
  • 打赏
  • 举报
回复
两个静态库的编译选项要想同,既选择相同的runtime library,在项目属性里设置,否则就会出问题
看你的描述感觉应当是这方面的问题
试一下看能否有帮助
Fireway2008 2009-04-01
  • 打赏
  • 举报
回复
abcd这个函数你是怎么写它的导出头的?
是不是没写对?
ILoveCLanguage 2009-04-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 oyljerry 的回复:]
没找到abcd 这个函数...
静态库中不用添加DLLMain()
[/Quote]

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

谢谢
oyljerry 2009-04-01
  • 打赏
  • 举报
回复
没找到abcd 这个函数...
静态库中不用添加DLLMain()
ILoveCLanguage 2009-04-01
  • 打赏
  • 举报
回复
以下操作均在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);
  }
  #endif



2.在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函数吗

^_^首次写静态库 新手

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧