场景描述:
环境:VS2010+NX10
假设库项目为A,使用项目为B。A头文件中包含:
static unsigned char nxauthblock[] = "NXAUTHBLOCK "
" "
" "
" "
" "
" "
" "
" "
" "
" "
" "
" NXAUTHBLOCK";
extern DllExport void NXSigningResource(void)
{
}
然后B调用A,配置头文件,库目录,附加依赖项后,B签名失败......
原因:
按理说,B中已经包含了签名函数,应该签名正确!
检查发现,B虽然调用了A,但是B并没有用到A中的函数,会不会跟这个有关?
于是在B中添加了对A函数的调用,签名成功!!!
原因A是动态库,如果没有函数使用,A不会加载进来,即签名函数没有添加,造成签名失败 !!!
其他问题补充1:
另如果B调用了A,无论是否使用了A函数,如果此时添加NXSigningResource.cpp文件,
编译会报错,因为签名函数存在两份。
其他问题补充2:
NX功能中 签名函数只能有一份,否则编译冲突。
如果当前功能代码不包含签名文件,调用的第三方库包含了签名文件:
此时可能会出现奇怪的问题:Debug签名成功,Rease签名失败
解决办法:
打开项目属性,逐个比较Debug/Release不同,一般是”C++/优化” 和 ”链接器/优化”,更改即可。
总结:
创建NX第三方库时,不宜添加签名文件,在项目本身添加签名文件更好。