VC++のコンパイラでラッパーライブラリを構築しようとしています。
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);
}
build.bat
cl /I%ERL_DRIVER_H% /LD /MD ErlDriver.c
これをビルドしようとすると、次のリンカーエラーが発生します。
ErlDriver.obj:エラーLNK2019:関数__driver_outputで参照されている未解決の外部シンボル_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は宣言されて定義されています。
では、何がリンカーエラーを引き起こしているのでしょうか?