.asm 调用生成的lib,在c++中调用出现的LNK2019错误??

wxpwxp 2010-02-03 11:26:36
先是一个c写的一个调用.asm文件里的汇编,
.asm文件的实体如下
include起作用吗?

%include "D:\server\客户端\library\MotorH264Encoder\i386\i386inc.asm"
;-----------------------------------------------------------------------------
; void x264_stack_align( void (*func)(void*), void *arg );
;-----------------------------------------------------------------------------
cglobal x264_stack_align
push ebp
mov ebp, esp
sub esp, 4
and esp, ~15
mov ecx, [ebp+8]
mov edx, [ebp+12]
mov [esp], edx
call ecx
mov esp, ebp
pop ebp
ret

.h文件里声明
#if defined(ARCH_X86) && defined(HAVE_MMX)
void x264_stack_align( void (*func)(x264_t*), x264_t *arg );
#else
#define x264_stack_align(func,arg) func(arg)
#endif

然后就在.c里面调用该函数x264_stack_align,该lib 编译成功,

但是调用lib就出现连接错误
264Encoder.lib(encoder.obj) : error LNK2019: 无法解析的外部符号 _x264_stack_align,该符号在函数 _x264_slices_write 中被引用
大家给看看那里出的问题,还是编译那里要设置

...全文
147 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
djlxue 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wxpwxp 的回复:]
很多这样的调用,不是一个而且也很长,修改很麻烦.
[/Quote]
那就直接#include <你的汇编文件>
在汇编的头部使用__asm不就好了
wxpwxp 2010-02-03
  • 打赏
  • 举报
回复
很多这样的调用,不是一个而且也很长,修改很麻烦.
djlxue 2010-02-03
  • 打赏
  • 举报
回复
直接使用__asm关键字

extern "C" _declspec(dllexport) void _stdcall GetCPUID(char pcCPUID[36])
{
memset(pcCPUID,0,sizeof(pcCPUID));
unsigned long s1=0,s2=0,s3=0,s4=0;
_asm
{
mov eax,01h
xor edx,edx
cpuid
mov s1,eax
mov s2,ebx
mov s3,ecx
mov s4,edx
}
sprintf_s(pcCPUID,CPUID_NUM,"%08x-%08x-%08x-%08x",s1,s2,s3,s4);
return ;
}
wxpwxp 2010-02-03
  • 打赏
  • 举报
回复
因为代码是别人写的,不是我写的,asm也比较多,这么一个个修改很麻烦,他的调用方式什么的,都不想修改,只是想知道这样写,产生这样的问题,是那里有问题了,,方便的话加我qq:18778922,帮我看看

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧