1

TVZLib.h、TVZlib.dll、および TVZlib.lib があり、gcc を使用して次のプログラムをコンパイルしています (これは単純なテスト ケースです)。コンパイラは私にエラーを与えます:

"undefined reference to '_imp__TVZGetNavigationMatrix'"

まだ。関数の呼び出しに別のタイプのパラメーターを使用してプログラムをコンパイルすると、それが正しいパラメーターではないというエラーが表示されます (*float が必要です)。私にとって、それは、それが何を望んでいるのかを知っているので、少なくとも関数を見つけたことを意味します。

私の調査から、人々はそれがライブラリのリンク、またはリンクの順序に関係していると考えていることがわかりますが、すべての gcc コマンドをすべての組み合わせで試しましたが、すべて同じエラーが発生しました。だから私はいくつかの助けを切望しています。

#include <stdlib.h>
#include <stdio.h>
#include "TVZLib.h"

int main() {
    float floatie = 2;
    float *ptr = &floatie;
    TVZGetNavigationMatrix(ptr);
    getchar();
    return 0;
}

よろしくお願いします!

私のコンパイラコマンド:

gcc dlltest.c -L. TVZLib.lib

ヘッダー ファイル (TVZLib.h)。

そして直接出力:

C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ccuDpoiE.o:dlltest.c:(.text+0x2c): undefined reference to `_imp__TVZGetNavigationMatrix'
collect2: ld returned 1 exit status
4

1 に答える 1

0

Windowsでネイティブにコンパイルしてからしばらく経ちました...

TVZlib.lib に対して静的にリンクするつもりでしたか? それは起こっていません。デフォルトでは、静的ライブラリと動的ライブラリの両方が見つかった場合、gcc はライブラリの動的バージョンを選択します。gcc を強制的に静的にリンクさせたい場合は、-staticオプションを使用できます。

メモリが正しく機能する場合、_imp__プレフィックスはDLLがロードされたことを示しています(_imp__シンボルプレフィックスは、DLLを呼び出すトランポリン関数に使用されます)。

于 2012-08-10T16:44:53.897 に答える