Visual Studio 2010 から swig を使用して dll ファイルを生成しようとしています。wrapper.cpp コードを作成してコンパイルし、すべてのライブラリの依存関係をプロジェクトに追加しました。.dll ターゲット拡張子を使用してプロジェクトのリリース バージョンをビルドしようとすると、次のエラーが発生します。
Generating non-SAFESEH image.
1>Ccrypto_wrap.obj : error LNK2019: unresolved external symbol "int __cdecl axtoi(char const *)" (?axtoi@@YAHPBD@Z) referenced in function __wrap_axtoi
それは有線です。wrapper.cpp の他のすべての外部シンボルが解決されているためです。
axtoi
! たとえば、私のwrapper.cppには、次の2つの参照がありaxtoi
ます。
(1)
ZEND_NAMED_FUNCTION(_wrap_axtoi) { char *arg1 = (char *) 0 ; zval
**args[1]; int result;
SWIG_ResetError(); if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_array_ex(1, args) != SUCCESS) {
WRONG_PARAM_COUNT; }
/*@SWIG:C:\Users\user\Desktop\Ccrypto\Lib\php\utils.i,62,CONVERT_STRING_IN@*/
if ((*args[0])->type==IS_NULL) {
arg1 = (char *) 0;
} else {
convert_to_string_ex(args[0]);
arg1 = (char *) Z_STRVAL_PP(args[0]);
}
/*@SWIG@*/;
result = (int)axtoi((char const *)arg1);
{
ZVAL_LONG(return_value,result);
}
return;
fail:
SWIG_FAIL();
}
(2)
SWIG_ZEND_NAMED_FE(axtoi,_wrap_axtoi,NULL)
クラスの共有オブジェクトを Linux で正常に作成し、それを PHP コードに含めて正常に動作したので、共有オブジェクトを Linux でチェックインしようとしたところaxtoi
、奇妙なことがわかりました。axtoi
共有オブジェクト内で grep すると、次のようになりました。
U _Z5axtoiPKc
0006ccf1 T _wrap_axtoi
しかし、たとえば、その使用法が私が持っているラッパーコードとitoax
同じである他のすべてのシンボルについて:axtoi
00093660 T _Z5itoaxi
0006e19f T _wrap_itoax
上記の wrapper.cpp コードとまったく同じように使用される類似のシンボルがいくつかありますaxtoi
が、未解決の外部シンボル エラーは発生しませんでした。何か案は?