CVI にインポートする必要がある VS で lib ファイルを作成しています。最近、リンカーの問題が発生しました。
_allmul() は未定義のシンボルです。
_allmul() と freinds は、さまざまな 64 ビット操作を処理する CRT ライブラリ関数への呼び出しとして実装されています。
すべてのコードをその中に入れたいので、私が書いたlibファイルは静的です。VS とのリンクは問題なく、すべての単体テストに合格します。
CVI-IDE とリンクすると、未解決の _allmul() について不平を言う CVI Linkter が残ります。
CRT リンクを静的にするには、VS で /MT スイッチを設定するだけで十分だと思いますが、これは間違っているようです。
なぜ私の仮定は間違っているのですか?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
}