一个比较大的项目这几天把它拆成了几个DLL,完工后编译运行发现找不到vcomp.dll(vcompd.dll),这个是OpenMP用的东西,直接放在能找到的地方不能用。
问题是同一个VS2005,在同一台机器上。打开没改造的项目就都没问题。项目设置都没变,拆分了几个DLL后怎么就找不到了呢?
哪位大侠帮我分析分析哪儿配置出问题了。

解决方案 »

  1.   

    仔细看下拆分的代码,可能是拆分的DLL用了OpenMP却没设置好路径吧
      

  2.   

    问题出在主程序的EXE上,DLL关掉和打开OpenMP都没关系。
    EXE一打开OpenMP就出这个错,怎么会这样呢?
      

  3.   

    dll里用到的一些东西没找到,所以可能在loadlibrar时就失败了。
      

  4.   

    沉的好快,看在分分的份儿上大家帮我顶顶。
    报告下新的进展:在DLL项目里面打开OpenMP就不出问题,并且运行时多核都能开动起来,CPU可以用到100%。为什么在主EXE项目打开OpenMP就挂呢?
    有没有这种可能vcomp.dll只能加载一个,禁止多次加载。可是在关闭DLL中的OpenMP后单独一个EXE中打开也是不可以。
    有什么合理的解释呢?有谁遇到过这种情况?
      

  5.   

    可能是路径给的不对,或DLL的版本不对
      

  6.   

    这个肯定是运行环境配置问题吧,DLL不是放过去就行了,有些必须要把manifest文件一起放过去才行,VC++运行库就是最好的例子。所有DLL都只加载一次的,如果一个进程不同模块都依赖一个DLL,也仅仅增加引用计数。
      

  7.   

    在exe里,试试用绝对路径加载dll
    如果加载不是,则看dll的依赖是否满足
      

  8.   

    LZ你拆分后的目录结构是怎样的?估计是vcompd.dll路径不对了。
      

  9.   

    LZ,可能是vcomp.dll依赖的库没有找到,你用VC工具,DEPENDS.EXE打开这个库,看看它依赖的库都有没有?
      

  10.   

    关闭openmp也不能运行,是不是于openmp没什么关系呢
      

  11.   

    直接用 depedens工具 看看是否有依赖的dll找不到了
      

  12.   

    可能是旧的dll放在了系统路径下,比如system32下,而新版本的代码默认去找的仍是system32下的,就找不到了。
      

  13.   

    谢谢大家回复,还是没解决。
    现在看来问题出现在主进程EXE,DLL项目打开或者关闭OpenMP都没关系,只要EXE项目一打开OpenMP就挂。
    我这个项目是从一个EXE的项目复制过来的,原来的项目没问题,裁掉一部分到其它DLL项目里面,裁剪出去的没问题,剩下的怎么就出问题了呢?困惑。现在是这样,同一个VS2005,打开原来的EXE项目编译运行就没问题,OpenMP一切正常。打开新的EXE项目,并且新项目还是拷贝原来的项目改造的,配置也没有改动,编译运行就找不到vcomp.dll了呢?兄弟们说的路径还有manifest试过了,没找到,谢谢各位。我要是新建一个项目使用OpenMP,也没有问题。要是项目小我宁愿新建一个项目把内容一点点复制过去,可是这个太大。还有就是究竟哪儿出问题,绕过去也不是办法是吧? 呵呵估计这样的问题大家也不好帮我,还是非常感谢,这贴先坚持两天,说不定谁遇到过这样的问题呢。
      

  14.   

    直接对比一下你的工程文件vcproj和没问题的对比一下.看是否有一些工程设置没注意
      

  15.   

    检查下工程里的路径设置,尤其是../之类。如果vcomp是用引入库连接的,那么多半是dll没找到,而不是dll本身不能装载。exe启动时会找:
    exe所在路径。
    当前路径。
    系统路径或Path(应该是无关的)
    实在不行,你把你的exe和拆出来的dll都放到之前项目的执行目录下运行看看。