我正在VS中编写必须导入CVI的lib文件。最近发生了链接器问题。
它说 _allmul() 是一个未定义的符号。
_allmul() 和 freinds 被实现为对 CRT 库函数的调用以处理各种 64 位操作。
我编写的 lib 文件是静态的,因为我希望所有代码都存在于其中。与 VS 链接没问题,所有单元测试都通过了。
与 CVI-IDE 链接会使 CVI Linkter 抱怨未解决的 _allmul()。
我认为在 VS 中设置 /MT 开关足以使 CRT 链接静态化,这似乎是错误的。
为什么我的假设是错误的?如何静态链接 CRT 调用?
编辑:
这是我可以在 VS2010 中编译但我无法在 CVI 中链接到的项目的简短演示 以下被编译为 LIB 项目:
标题
void print( unsigned A, unsigned B );
代码
#include "MyprintInterface.h"
#include <stdio.h>
void print( unsigned A, unsigned B ){
long long copyA = ( long long ) A;
long long copyB = ( long long ) B;
printf_s( " %lli * %lli = %lli ", copyA, copyB, copyA * copyB );
// copyA * copyB -> this invokes allmul
// printf_s this is a ms specific function
}