0

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
}
4

1 に答える 1