0

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が、未解決の外部シンボル エラーは発生しませんでした。何か案は?

4

1 に答える 1

0

私は答えを見つけました:c++オプションのswigラッパーコードジェネレーターはaxtoi()関数ではなく関数を呼び出しているようatoi()です。SWIGで生成されたwrapper.cppで編集する必要があり、エラーが解決されます。

于 2012-09-30T13:36:37.003 に答える