C++ 如何加载lib

 我来答
传薪网络
2015-10-27 · TA获得超过1355个赞
知道小有建树答主
回答量:635
采纳率:92%
帮助的人:238万
展开全部

  1.lib文件的加载  

  lib其实就是window下的静态库文件

  C++加载静态库文件只能静态加载,在编译的时候进行

  下面以vs2010为例:

  首先右键单击项目,选择属性:

  

  打开配置属性-链接器-常规-附加库目录

  

  新建一行,填入你要加载lib文件所在的路径

  

  现在设置好了加载的lib目录,再设置要加载的lib

  打开项目属性-链接器-输入-附加依赖项

  

  在编辑框输入lib的全名(不带路径)一个文件占一行

  

  现在再编译文件的时候,自动就会使用lib中包含的符号了

  2.lib文件的使用

  lib文件是window的静态库文件,其实就是很多编译好的函数代码的集合。这种文件里面的代码无法直接执行,必须进行二次编译后才能使用。当你使用了lib中的函数后,编译器会将其代码从lib文件中提取出来,然后追加到你自己的程序中去。所以,使用lib编译出来的执行程序比用dll的大一些,甚至很多。但是这样做,程序的执行效率会高很多(dll必须在运行时去找函数来执行,并且要进行耗时的长跳转),一种典型的通过空间换时间的策略。

wen8756jie
2015-10-15 · TA获得超过174个赞
知道小有建树答主
回答量:194
采纳率:60%
帮助的人:55.6万
展开全部
1 LIB文件直接加入到工程文件列表中
  在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中"Add Files to Project"菜单,在弹出的文件对话框中选中要加入DLL的LIB文件。然后在首先要使用该函数的地方加上该LIB的头文件,如#include "..\lib.h"即可(没有头文件当然就不用了)。
  2 设置工程的 Project Settings来加载DLL的LIB文件
  打开工程的 Project Settings菜单,选中Link,然后在Object/library modules下的文本框中输入DLL的LIB文件,如you.lib(或者lib文件的路径,包括文件名)。然后在首先要使用该函数的地方加上该LIB的头文件,如#include "..\lib.h"即可(没有头文件当然就不用了)。
  3 通过程序代码的方式
  加入预编译指令#pragma comment (lib,"*.lib"),这种方法优点是可以利用条件预编译指令链接不同版本的LIB文件。因为,在Debug方式下,产生的LIB文件是Debug版本,如Regd.lib;在Release方式下,产生的LIB文件是Release版本,如Regr.lib。然后在首先要使用该函数的地方加上该LIB的头文件,如#include "..\lib.h"即可(没有头文件当然就不用了)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
godson126
2010-09-28 · TA获得超过194个赞
知道小有建树答主
回答量:202
采纳率:0%
帮助的人:0
展开全部
#include"XXlib.h" //包含库的头文件

#pragma comment(lib, "lib文件的路径")
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
math1141
2010-09-29 · 超过19用户采纳过TA的回答
知道答主
回答量:35
采纳率:0%
帮助的人:43.1万
展开全部
我前两天也遇到这个问题,刚刚解决了。下面是我解决的方法:

设置工程的 Project Settings来加载DLL的LIB文件,打开工程的 Project Settings菜单,选中Link,然后在Object/library modules下的文本框中输入DLL的LIB文件。

当应用程序对DLL的LIB文件加载后,还需要把DLL对应的头文件(*.h)包含到其中,在这个头文件中给出了DLL中定义的函数原型,然后声明。

当然在VS2008中也可以类似操作,可能就是菜单界面不一样了,得自己去相应地对应一下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
capcoffee1
2010-09-28 · TA获得超过171个赞
知道答主
回答量:113
采纳率:0%
帮助的人:92.9万
展开全部
C++本身是一个开发语言,语言本身是没有办法进行Lib文件的加载的,需要调用操作系统的几口函数来进行,几乎所有的操作系统都提供了C的接口函数来实现Lib文件的加载,由于不同的操作系统平台提供的接口函数有所区别,这里以Windows为例给出示例,这些代码是在VC6下编译编译通过的,是一个成员函数的局部,供参考。祝开心。

void CMemSort::BeginProcess()
{
//...

// using dll to provide sort methods
#define MEM_SORT_DLL

#ifdef MEM_SORT_DLL
// load memsort.dll
HMODULE hd = NULL;
if(NULL == (hd = ::LoadLibrary("MemSort.dll")))
{
VERIFY(ResetEvent(reinterpret_cast<CDataAcqApp*>
(AfxGetApp())->m_hEventTrdMux));
m_pInfoWnd->SetWindowText(STR_SORT_DLLFAULT);
Beep(600, 100);
return;
}

// call PassAddr() from MemSort.dll
typedef int(_cdecl *PassAddr)(
CTypedPtrArray<CPtrArray, SORTCONTEXT*> *heapArray,
CTextProgressCtrl *pTextProgressBar,
CStatic *pInfoWnd);
PassAddr DllPassAddr;
DllPassAddr=(PassAddr)GetProcAddress(hd, "PassAddr");
DllPassAddr(&m_heapArray, m_textProgressBar, m_pInfoWnd);

// call HeapSort()
typedef int(_cdecl *HeapSort)();
HeapSort DllHeapSort;
DllHeapSort = (HeapSort)GetProcAddress(hd, "HeapSort");
DllHeapSort();

// call SubItemSort()
typedef int(_cdecl *SubItemSort)();
SubItemSort DllSubItemSort;
DllSubItemSort = (SubItemSort)GetProcAddress(hd,"SubItemSort");
DllSubItemSort();

::FreeLibrary(hd);
#else
// using local methods
HeapSort();
SubItemSort();
#endif

//...

}

【优势软件实训】
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式