您的位置:首页 > 其它

GPU(CUDA)学习日记(二)--------VS2010不同工程之间调用DLL或者LIB

2012-08-01 16:48 543 查看
最近的算法利用不同工程生成动态库或是静态库,然后在主工程中调用,我应用的开发工具是VS2010,可以说,C++在中的不同工程之间的链接是很麻烦的!~~~

本人首先生成的静态库LIB(因为比较简单,⊙﹏⊙b汗~~~)

具体方法如下:

1、工程属性中,将生成改为“.lib”,然后将“C/C++”中的“代码生成”项改为“多线程调试”(为了解决msvcprtd.lib重定义的问题)。

2、在主工程中,主函数中加入.h头文件。

3、在主工程中添加“引用”,在“链接器”中的“输入”项中添加“XX.lib”,并且要在“VC++目录”,“库目录”中加入lib文件的地址。(这样的话,无法解析的外部符号应该就已经解决了~~~)

由于自己的CUDA开发环境的问题,.cu文件总是出现诸如少括号,少分号,而实际看程序时是完全正确的。所以,本人开始怀疑是不是静态库的分工程中没有链接一项,所以找不到CUDA的库文件或者是编译器(开始怀疑一切~)。接下来开始探索加载动态库:

具体方法如下(转自他人~):

1。隐式加载:即在程序中包含lib文件和.h文件,隐式链接有时称为静态加载或加载时动态链接。例如:

#include "somedll.h"

#pragma comment( lib, "somedll.lib")

然后就可以直接调用此dll中的函数,注意运行时仍然需要somedll.dll。

2。显示加载:使用loadlibrary,GetProcAddress,FreeLibrary,不需要.h文件和.lib文件,但是要知道函数的原型。显式链接有时称为动态加载或运行时动态链接。

不同工程之间加载动态库的问题已经解决,具体步骤见本人的“GPU学习日记(二)续二”中的说明。

好吧,我承认自己的博客写的有点水~但是希望可以微微的帮助有同样困扰的人一下哈~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: