怎么让VC6工程静态链接?
有人告诉我用Project-Setting->General->Microsoft Foundation Classes->Using MFC in static Library来设置,我发现无效。
具体说说我是怎么做的。
在VC6.0的环境下,有两个工程,有一个工程A,是一个dll的工程,编译链接成功之后生成A.dll和A.lib
工程B是一个exe工程,我在link中加入A.lib的路径之后,可以正常编译链接,运行的时候会报错,提示没有找到A.dll ??!!
看到这个错误,我不感到奇怪,应该是由于动态链接的缘故,所以我把A.dll copy到B.exe的路径之后,运行正常。
但是我想把工程设置为静态链接,麻烦就来了,删除A.dll之后,我无论是用“Using MFC in static Library”还是其他,都会报需要A.dll的错误,也就是说没有办法设置为静态链接。
请大家指点一下,不够我再加分,谢谢!
问题点数:30、回复次数:7Top
1 楼UPCC(杂食动物)回复于 2006-07-04 10:11:19 得分 5
现在使用.NET了,记得静态库是在编译那里设置Top
2 楼jixingzhong(瞌睡虫·星辰)回复于 2006-07-04 10:13:05 得分 10
静态连接不是你理解的这个意思,
静态连接是指 程序在运行的时候, 同时载入整个程序以及需要的dll,
所以这个 dll 没有的话,
这个程序的载入将出错而终止 ...Top
3 楼jixingzhong(瞌睡虫·星辰)回复于 2006-07-04 10:16:07 得分 0
比较:
静态连接: 启动时候,载入整个dll,可以任意调用里面的导出函数、类等,不需要手动释放,条件是需要一个 .lib 导入库;如果dll没有,则整个应用将无法启动。
动态连接: 手动载入,手动释放,应用可以启动,但是在使用 dll 时候将出错 ...相比于静态方式更自由,对内存的利用更高(只在需要时候才载入) ...Top
4 楼jixingzhong(瞌睡虫·星辰)回复于 2006-07-04 10:18:52 得分 0
.lib 被加入工程后,
这个应用根据一定规则去寻找匹配的 dll,
找到后载入 dll ,
并使用里面的函数 ...
Windows一般遵循下面的搜索顺序来定位DLL:
1.包含EXE文件的目录,
2.进程的当前工作目录,
3.Windows系统目录,
4.Windows目录,
5.列在Path环境变量中的一系列目录。
所以,你用到的 dll 必须在上述的某一个目录中,调用 dll 的B应用才可以正常运行 ~Top
5 楼the_other_door()回复于 2006-07-04 13:20:09 得分 10
你写的还是一个动态库呀,那个A.lib只是包含了动态链接时需要的代码而已;
用相同的源码,再建一个WIN32 static library工程。Top
6 楼CandCplus()回复于 2006-07-04 20:10:56 得分 0
jixingzhong(瞌睡虫:选择了远方,只顾风雨兼程!)
你说的应该是动态调用和静态调用吧。我说的静态链接是exe包含dll里边所有内容,这样就不用单独发布dll了。我记得Delphi中的选项可以设置,VC中我还不大明白。
the_other_door()
我比较同意楼上the_other_door() 的观点,应该是我选择错误了。
还有其他意见吗?意见越辨越明哦
Top
7 楼yiyo2025(HenryKong)回复于 2006-07-04 20:31:06 得分 5
我也同意the_other_door()的观点Top




