qt调用c语言函数库_QT加载muPDF静态库的问题和解决(导入C语言静态库,QT的运行时库设定)...

首先下载muPDF,找到mupdf-1.2-source.zip下载解压. 进入win32目录,打开mupdf工程(vs2008及以上会提示转换,转换后自动产生.sln工程)

默认情况下没有v8引擎,v8版工程编不过,可以忽略. 确保mupdf.exe生成成功,可以测试一下效果.

制作一个QT动态库dll实现一些功能,包含头文件fitz.h 导入库libmupdf.lib .一切完事后编译发现所有使用到的函数都报LNK2001: unresolved external symbol 链接错误:未解析的外部符号.

原因和解决办法如下:

因为mupdf使用纯C代码,编译产生的lib具有浓厚的C色彩,作为lib导出的函数修饰符仅仅只有前缀_. 如fz_new_context函数的导出为_fz_new_context.而我们用c++代码加载时,修饰后找的函数却是?fz_new_context@@YAPAUfz_context_s@@PAUfz_alloc_context_s@@PAUfz_locks_context_s@@I @Z自然找不到.

让mupdf库修改他的导出自然是不可能了,只能在导入的时候做特别声明. 找到fitz.h 由于里面的函数太多,我们只找相关的函数(就是报无法解析的外部符号的函数)在前面加extern "C"让他按C方式修饰再找,就能找到了. 为了保持原代码的完整性,可以复制fitz.h到fitz_cpp.h,在新文件中修改,自己的代码只包含"fitz_cpp.h"

#ifndef __FITZ_CPP_H__

#define __FITZ_CPP_H__

extern "C"

{

#include "mupdf/fitz.h"

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值