VC++のコンパイラでラッパーライブラリを構築しようとしています。未解決の外部シンボルエラーで混乱しました
cl /I%ERL_DRIVER_H% /LD /MD ErlDriver.c
あるbuild.bat
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);
}
私はこれを構築しようとすると、私は、次のリンカエラーを取得:
ErlDriver.obj : error LNK2019: unresolved external symbol _WinDynDriverCallbacks referenced in function __driver_output
を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はが宣言定義さ
です。
リンカエラーの原因は何ですか?
私はそれがなぜ機能するのか全く分かりませんが、確かにあります。なぜ私はそれを使用する必要はありません私が見つけることができるすべてのErlangポートドライバは何ですか? –
リンカは定義を必要としないように、同等のものを実行している必要があります。そうでないと、リンカは定義を必要としません。 –
リンクを必要とする.libファイルがあります。あなたが使用しているSDKの一部であるかもしれません –