标题:依然是静态库编译问题
只看楼主
BianChengNan
Rank: 8Rank: 8
等 级:贵宾
威 望:13
帖 子:302
专家分:972
注 册:2011-11-30
结帖率:50%
已结贴  问题点数:50 回复次数:15 
依然是静态库编译问题
接上贴
求解答(关于库编译)
我想编译一个自己的库,(假定叫MathLib),在库中调用了另外一个库的函数,假设是BaseCalcLib中的函数。
弱弱的问一下,我怎么才能用BaseCalcLib的函数呢?
我知道的有如下几种方法:
1.LoadLibrary 显示加载
2.用#pragma comment 加载BaseCalcLib库。包含对应的头文件
3.在工作区中添加BaseCalcLib库。包含对应的头文件

有没有这么一种方法,只引用BaseCalcLib的头文件就可以使用BaseCalcLib库中的函数呢?

ps:我在看公司的一个库的工程设定时发现了我所问的情况,个人感觉是不可以的。如果有知道的高手,请不吝赐教。多谢多谢
-----------------------------------------------------------------------------------------------------------------------
我现在得到的结论如下:
编译静态库时,并不需要知道每个函数的实现代码,因为库本身不能执行。
当某个exe文件需要调用这个静态库时,就需要解决所有调用。也就是说找到所有调用函数的函数体。这时候必须把用到的库都加到当前exe的工程中。

具体是怎么实现的我也不清楚,依然在调查中,希望看到帖子的兄弟可以一起想想,有知道的兄弟请指点,多谢

搜索更多相关主题的帖子: 函数 工程 comment 工作区 
2012-03-08 16:39
非死亡!
Rank: 8Rank: 8
来 自:四川
等 级:蝙蝠侠
帖 子:179
专家分:760
注 册:2011-10-31
得分:13 
这个  这个 我会的  你一定会  你会的  我不一定会  不能帮你啊   我只能祈祷了

能力 技巧
2012-03-08 17:54
tisyang
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:132
专家分:737
注 册:2011-5-7
得分:13 
静态库理解还好,都是编译好的二进制代码,需要用到的时候提供头文件和lib库文件,链接的时候就可以直接把静态库中的代码链接到最终的可执行文件中去了。

C++ 用无参数构造函数生成对象时候请勿在构造函数后添加无用的那一对括号,否则有可能会被当成函数声明而忽略,嗯,栈上构建的时候就是这样。
2012-03-08 19:49
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:13 
链接的时候需要BaseCalcLib库文件,其实用#pragma comment就是链接这个库。

My life is brilliant
2012-03-08 20:30
BianChengNan
Rank: 8Rank: 8
等 级:贵宾
威 望:13
帖 子:302
专家分:972
注 册:2011-11-30
得分:0 
我又得到一些新发现:静态库中不能再包含其他的静态库或者动态库。动态库中却可以。

我的群:149544757 C/C++/Assembly 喜欢交流的朋友进,进群请写消息
2012-03-09 12:52
张敏樱木花道
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:137
注 册:2011-3-26
得分:13 
以我的理解,你说的方法肯是有的。
我的理由是在写socket程序时 我们只是简单的写了
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
我们就可以实现对其中的函数的调用了,我们并没有去拷贝.lib文件到我们的工程中。
那么vc是怎么实现的呢?我认为是vc可以自动重定位这个文件,也就是说在编译或者链接的时候VC会自动的去搜索一个文件夹,而这个文件夹是专门存放.lib文件的。如果你能找到这个文件夹的位置,将你的lib放在里面就可以实现你想要的效果了。也有可能是vc会去搜寻我们的系统目录来找到lib库,毕竟vc和windows是一家。

我在写自己的库的时候也有这个问题,写完DLL后,在一个头文件中声明所有的导出函数,也老是每次都要拷贝lib文件,挺烦的,现在也在解决这个问题。

说得简单一点:你可以将你的lib文件拷贝到vc的安装目录中的lib文件夹下,也许会实现你要的效果。
以上只是个人想法,等晚上有空再去验证一下,告诉你结果。

如果上面的方法不行的话,可以自己开发一个向导。这个一定行。不过技术要求高。
2012-03-09 15:10
BianChengNan
Rank: 8Rank: 8
等 级:贵宾
威 望:13
帖 子:302
专家分:972
注 册:2011-11-30
得分:0 
以下是引用张敏樱木花道在2012-3-9 15:10:35的发言:

以我的理解,你说的方法肯是有的。
我的理由是在写socket程序时 我们只是简单的写了
#include
#pragma comment(lib,"ws2_32.lib")
我们就可以实现对其中的函数的调用了,我们并没有去拷贝.lib文件到我们的工程中。
那么vc是怎么实现的呢?我认为是vc可以自动重定位这个文件,也就是说在编译或者链接的时候VC会自动的去搜索一个文件夹,而这个文件夹是专门存放.lib文件的。如果你能找到这个文件夹的位置,将你的lib放在里面就可以实现你想要的效果了。也有可能是vc会去搜寻我们的系统目录来找到lib库,毕竟vc和windows是一家。

我在写自己的库的时候也有这个问题,写完DLL后,在一个头文件中声明所有的导出函数,也老是每次都要拷贝lib文件,挺烦的,现在也在解决这个问题。

说得简单一点:你可以将你的lib文件拷贝到vc的安装目录中的lib文件夹下,也许会实现你要的效果。
以上只是个人想法,等晚上有空再去验证一下,告诉你结果。

如果上面的方法不行的话,可以自己开发一个向导。这个一定行。不过技术要求高。
#pragma comment(lib,"ws2_32.lib")
貌似上面这句话就是引用库了吧,不知道兄弟明白我要表达的意思了吗?

我的群:149544757 C/C++/Assembly 喜欢交流的朋友进,进群请写消息
2012-03-09 15:22
BianChengNan
Rank: 8Rank: 8
等 级:贵宾
威 望:13
帖 子:302
专家分:972
注 册:2011-11-30
得分:0 
以下是引用lz1091914999在2012-3-8 20:30:21的发言:

链接的时候需要BaseCalcLib库文件,其实用#pragma comment就是链接这个库。
链接的时候???能说明白点吗?是指生成exe文件的时候吗??

我的群:149544757 C/C++/Assembly 喜欢交流的朋友进,进群请写消息
2012-03-09 15:23
BianChengNan
Rank: 8Rank: 8
等 级:贵宾
威 望:13
帖 子:302
专家分:972
注 册:2011-11-30
得分:0 
以下是引用非死亡!在2012-3-8 17:54:02的发言:

这个  这个 我会的  你一定会  你会的  我不一定会  不能帮你啊   我只能祈祷了
。。。我很菜其实。发帖出来是希望能群策群力,人多力量大,感谢兄弟的关注。
大家一起努力

我的群:149544757 C/C++/Assembly 喜欢交流的朋友进,进群请写消息
2012-03-09 15:24
BianChengNan
Rank: 8Rank: 8
等 级:贵宾
威 望:13
帖 子:302
专家分:972
注 册:2011-11-30
得分:0 
以下是引用tisyang在2012-3-8 19:49:36的发言:

静态库理解还好,都是编译好的二进制代码,需要用到的时候提供头文件和lib库文件,链接的时候就可以直接把静态库中的代码链接到最终的可执行文件中去了。
我的意思是我在一个新的静态库中引用了另外一个静态库中的文件。可是没有包含他。不太明白还是

我的群:149544757 C/C++/Assembly 喜欢交流的朋友进,进群请写消息
2012-03-09 15:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-362584-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.223475 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved