pitlane929 2014-12-01 16:13 采纳率: 100%
浏览 1633
已采纳

源代码的几个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条回答

  • WitcherLu 2014-12-11 01:07
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题