问题描述
- 源代码的几个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