質問

私がいるというラッパーをもとに図書館VC++'sコンパイラです。

ErlDriver.c

#define __WIN32__
#define DLL_EXPORT __declspec(dllexport)

#include "erl_driver.h"

DLL_EXPORT int _driver_output(ErlDrvPort port, char *buf, int len) {
    return driver_output(port, buf, len);
}

ます。バット

cl /I%ERL_DRIVER_H% /LD /MD ErlDriver.c

ようとするとこを取得し、以下のリンカーエラー:

ErlDriver.obj:エラー LNK2019:未解決の外部記号_WinDynDriverCallbacks参照される関数__ドライバ_出力

erl_win_dyn_driver.h に含まれてい erl_driver.h)

typedef struct {
    WDD_FTYPE(driver_output) *driver_output;
    // a ton more of those
} TWinDynDriverCallbacks;

extern TWinDynDriverCallbacks WinDynDriverCallbacks;

#define driver_output (WinDynDriverCallbacks.driver_output)

なので、ご覧の通り、WinDynDriverCallbacksは 定義 宣言しています。

何が起こるリンカーエラーになるのだろうか?

役に立ちましたか?

解決

あの微妙な違い"を宣言する"何か"を定義する"のではCまたはC++.きを宣言するので、このコンパイラが一定のシンボルを定義するか-このコードを使用する記号なく、実際の定義で設定します。まだ定義のシンボルのどこかにコードで連動もしくはエラーメッセージです。

例えば、この宣言のシンボル WinDynDriverCallbacks:

extern TWinDynDriverCallbacks WinDynDriverCallbacks;

コードは、この宣言-このコードを使用するシンボルの成功にコンパイルなしている。

を追加する必要があります、どこかで定義:

TWinDynDriverCallbacks WinDynDriverCallbacks;

定義に入れなければなプロセスにおけるソースコードのファイルのどこかには一般的にヘッダーファイル).これはコンパイラの空間を割り当てるオブジェクトのコードをそのオブジェクトでは、プログラムへのリンクが成功しました。

他のヒント

また、定義されていない(少なくともいくつかり引用).この宣言しています。の"extern"キーワードは"の定義このシンボルが表示され、別の作成ユニット(ソースファイル." が必要との連携オブジェクトファイル(または図書館)から生産された統のソースファイルを定義することを象徴の一つです。

私も同様の問題を築くごWindows上でしか利用できません。未解決の外部記号_WinDynNifCallbacks.がこの定義がすでにERL_NIF_INITマクロ、私の場合、全体のマクロが必要で囲まれextern Cブロックです。

ieことに失敗した

extern "C" ERL_NIF_INIT(...)

この成功

extern "C"
{
   ERL_NIF_INIT(...)
}

私はこの問題によるものと同じ問題がDRIVER_INITマクロのためには、gimp用ドキュメポートドライバーです。

Driver_Initがメインのループを宣言する"TWinDynDriverCallbacks WinDynDriverCallbacks;"で適切に宣言された複数のラインを定義するdriver_init.なんかが必要でとれたextern"c"

このスレッドが約万回できるように設定マbarebones gettextポートドライバをまということになる。私のジョー-アームストロング-プログラミングのgettext書第12章インターフェースです。使用erl5.9vs2010.

このコードを書いた漏れや誤りexample1_lib.c.あのエラが、本書の対gimp用ドキュメ版に変わります。

に必要なセット(#define WIN32)のプexample1_lib.cその他gimp用ドキュメデフォルトした、Linuxです。

第二に必要な変更(int bufflen)(ErlDrvSizeT bufflen)example_drv_output.

その後、内蔵。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top