源代码的几个dll库出现循环调用时该如何编译?

问题描述

源代码的几个dll库出现循环调用时该如何编译?
是这样,我在网上下了一份c的源代码,比较老了,09年写的,是windows平台下的。
代码里作者自己写了几个dll库,也提供了相应的cpp文件,但是都没编译好。
之前在网上查说用到dll库时如果不用loadlibrary函数的话就要相应的Lib文件,作者也是这么干的。但是这几个库出现了循环调用的情况。
只是库循环调用,不是函数循环调用。比如B库调用了A库的a函数,而A库又调用了B库的b函数,而a、b函数之间没有任何关系。这样一来我无论是A库还是B库的Lib文件都得不到了。。。
于是我想问这种情况下源代码该如何编译?
顺带提下,编译器用的vs2010

其实源代码里也附带了几个dll库的Lib文件,但是可能由于编译器的问题,几个参数类型有TCHAR的函数编译器始终认不出来,报的错是这样的:
无法解析的外部符号 ""__declspec(dllimport) int cdecl package_search_file(char const *)"" (imp_?package_search_file@@YAHPBD@Z),该符号在函数 _main 中被引用
认不出package_search_directory这个函数,这个函数我在相应cpp文件里找到了,定义是这样的
PACKAGE_CORE_API int package_search_file(const TCHAR *path)
我打开了Lib文件看了下,vs2010正常编译出来TCHAR *参数类型的符号是这样的
fio_operation_length_of@@YAHPAD
而源代码中的参数类型的符号是这样的
package_search_file@@YAHPBG
注意@@后面的内容
不要跟我说把G改成D,编译器会报LIB文件损坏……
网上说的用LIB.exe生成Lib文件的办法试过了,编译器不认……
能解决这个问题应该也能解决我现在的困境。

求各位大神指教了

解决方案

为了解决无法解析的外部符号问题,你可以试一下把自己C++的工程字符集改成Unicode的再重新编译。在项目上右键-属性-常规-字符集-使用Unicode字符集。因为TCHAR是个宏,在ANSI项目中类型是char,如果LIB库编译的是Unicode版,应该会链接的时候找不到函数。

时间: 2024-12-31 06:42:43

源代码的几个dll库出现循环调用时该如何编译?的相关文章

c++-linux动态库与静态库之间的调用问题

问题描述 linux动态库与静态库之间的调用问题 linux程序编译通过,运行时出错symbol lookup error: /usr/lib/libE.so: undefined symbol: test_D1 静态库libD.a中: 提供函数接口test_D(),test_D1(),test_D2() 动态库libE.so中:提供函数接口test_E() int test_E() { test_D(); return 0; } 应用程序make时,链接了动态库libE.so,将静态库libD

2010-Framework and References引用Dll库

问题描述 Framework and References引用Dll库 使用VisualStudio2010开发平台,关于MFC Dll的引用问题,工程属性中有两种方法都可以把 Dll库引用进来,分别是Framework and References 和 Additional Dependencies,但不是特别清楚这两种方法具体的使用场合. 以下是个人对这两种方法的理解: Framework and References,只能引用本地Solution下自己编译生成的Dll库 Additiona

编辑器-C++如让程序所需的资源嵌入到生产的.dll库

问题描述 C++如让程序所需的资源嵌入到生产的.dll库 我有写一个C++的程序,启动项目的输出类型为动态库.dll,这个程序引用了一些编辑器自带的.lib文件和项目中其他的一些.dll文件,我想问下,该如何让哪些被引用的资源嵌入到我生成的.dll文件中,在移植该.dll文件时,就不需要考虑其他文件是否也要一起引用 解决方案 http://wenku.baidu.com/link?url=1lDnfEd-Ec-0kRiHqj8m2AjEQ8FblHzrcLX9i8MmYwM0rbk3vsZc6r

运行时出错:无法找到指定DLL库文件“SkinH

  运行时出错! 错误信息:无法找到指定DLL库文件"SkinH_EL.dll"中的输出命令"SkinH_Attach_Ex" 这是用易语言编写的程序,缺少了运行库

封装-js调用ocx dll库(存在依赖库dll)出现问题

问题描述 js调用ocx dll库(存在依赖库dll)出现问题 最近遇到一个问题,我使用vc6封装的 atl-- dll的ocx控件, 名字为 test.dll (内部就一个add接口), 通过js调用,可以调用成功, 然后我又封装了一个 ocx的dll,名字为a.dll, a依赖于b.dll(这个就是一个动态链接库), 注册a.dll之后,再用js调用,单步调试浏览器就会报错:"对象不支持此属性和方法",这个是什么原因导致的? 解决方案 最有可能的原因,控件没有部署好,或者安全性问题

jna dll-java 用jna调用dll库问题

问题描述 java 用jna调用dll库问题 昨天接手一个新项目,是关于java调用dll的,用jna实现,在我本机上运行成功,今天换了台电脑,就出现了EXception in main thread java.lang.UnsatisfiedLinkError UNable to load library..........请问有谁知道原因啊?急. 解决方案 dll已经放到system32 下了,还是一样出错 解决方案二: 目测是需要加载的dll位置不对 你再看看啦 解决方案三: 使用JNA通

Java如何调用C++ DLL库_java

 最近做了一个网页端人脸识别的项目,用c++写了人脸识别的算法,但是在网页端要使用java后台,这其中就涉及到了java调用dll的问题.下面是小编通过查阅相关资料,实现的一个简单例子. 1.第一步,先在Java中新建一个类 如上图,其中注意这句System.loadLibrary("javaCallcpp");,这就是加载dll文件的代码了.然后我们需要dll中实现下面定义的加减乘除方法. 2.编译文件,文件名为Java2cpp.java,首先编译成class文件,如果用的是ecli

移植-有没有c++不用lib库和dll库就能直接读取HDF文件的方法?

问题描述 有没有c++不用lib库和dll库就能直接读取HDF文件的方法? 本想人读取HDF文件,为了方便移植,想不借助外部库直接用c++读取HDF文件,大神请帮忙.... 解决方案 http://download.csdn.net/detail/xiaomi321123/2817628

mfc-MFC、dll库中的对话框,无法用Tab键控件之间切换

问题描述 MFC.dll库中的对话框,无法用Tab键控件之间切换 在控件风格中已经加了tab相关的风格,控件属性Tabstop也改成了true,也Ctrl+D设置了控件响应tab键的顺序,可是按tab键就是不切换,同时上下键和回车键也没用,求大神解答