2 pitlane929 pitlane929 于 2014.12.02 00:13 提问

源代码的几个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文件的办法试过了,编译器不认……
能解决这个问题应该也能解决我现在的困境。

求各位大神指教了

1个回答

wylblq
wylblq   2014.12.11 09:07
已采纳

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

pitlane929
pitlane929 问题我已经解决了,但还是谢谢你了。不是字符集的问题,两种字符集我都试过,都不行。目测是编译器的版本问题。
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!