0

Windows で mingw コンパイラを使用して libaws をコンパイルしようとしています。libaws (https://sourceforge.net/projects/libaws/) コード内で、次のことを試します。

C:/la/include/libaws/config.h:2:0: warning: "WIN32" redefined [enabled by default]
<built-in>:0:0: note: this is the location of the previous definition
In file included from C:/tools/libaws-0.9.2/src/canonizer.h:23:0,
                    from C:\tools\libaws-0.9.2\src\s3\s3connection.cpp:25:
                    C:/tools/libaws-0.9.2/src/s3/s3connection.h:62:9: error: expected identifier before '(' token
                    C:/tools/libaws-0.9.2/src/s3/s3connection.h:62:9: error: expected '}' before '(' token
                    C:/tools/libaws-0.9.2/src/s3/s3connection.h:62:9: error: expected unqualified-id before numeric constant
                    C:/tools/libaws-0.9.2/src/s3/s3connection.h:62:9: error: expected ')' before numeric constant
                    C:/tools/libaws-0.9.2/src/s3/s3connection.h:70:5: error: expected unqualified-id before 'public'
                    C:/tools/libaws-0.9.2/src/s3/s3connection.h:109:19: error: 'ActionType' was not declared in this scope
                    C:/tools/libaws-0.9.2/src/s3/s3connection.h:109:43: error: expected primary-expression before 'const'
                    C:/tools/libaws-0.9.2/src/s3/s3connection.h:110:19: error: expected primary-expression before 'const'
                    C:/tools/libaws-0.9.2/src/s3/s3connection.h:110:51: error: expected primary-expression before 'aExpiration'
                    C:/tools/libaws-0.9.2/src/s3/s3connection.h:129:5: error: expected unqualified-id before 'private'
                    C:/tools/libaws-0.9.2/src/s3/s3connection.h:135:51: error: 'ActionType' has not been declared
                    C:/tools/libaws-0.9.2/src/s3/s3connection.h:139:40: error: variable or field 'setRequestMethod' declared void
                    C:/tools/libaws-0.9.2/src/s3/s3connection.h:139:40: error: 'ActionType' was not declared in this scope
                    C:/tools/libaws-0.9.2/src/s3/s3connection.h:154:5: error: expected unqualified-id before 'public'
                    C:/tools/libaws-0.9.2/src/s3/s3connection.h:161:1: error: expected declaration before '}' token
                    C:/tools/libaws-0.9.2/src/s3/s3connection.h:143:7: warning: 'size_t aws::s3::getS3Data(void*, size_t, size_t, void*)' declared 'static' but never defined [-Wunused-function]
                    C:/tools/libaws-0.9.2/src/s3/s3connection.h:146:7: warning: 'size_t aws::s3::setCreateBucketData(void*, size_t, size_t, void*)' declared 'static' but never defined [-Wunused-function]
                    C:/tools/libaws-0.9.2/src/s3/s3connection.h:149:7: warning: 'size_t aws::s3::setPutData(void*, size_t, size_t, void*)' declared 'static' but never defined [-Wunused-function]
                    C:/tools/libaws-0.9.2/src/s3/s3connection.h:152:7: warning: 'size_t aws::s3::getHeaderData(void*, size_t, size_t, void*)' declared 'static' but never defined [-Wunused-function]
                    src\CMakeFiles\aws.dir\build.make:561: recipe for target 'src/CMakeFiles/aws.dir/s3/s3connection.cpp.obj' failed
                    mingw32-make[2]: *** [src/CMakeFiles/aws.dir/s3/s3connection.cpp.obj] Error 1
                    CMakeFiles\Makefile2:1006: recipe for target 'src/CMakeFiles/aws.dir/all' failed
                    mingw32-make[1]: *** [src/CMakeFiles/aws.dir/all] Error 2
                    Makefile:145: recipe for target 'all' failed
                    mingw32-make: *** [all] Error 2

                    C:\la>

それが起こっている場所はクラスです

class S3Connection {
    enum ActionType {
        // VALUES
    };
};
4

2 に答える 2

1

問題は、列挙型名の 1 つがs3connection.hWin32 SDK のマクロ名と競合することです。Win32 では、DELETEACL (アクセス制御リスト) を処理するために使用されるマクロです。おそらく、これに対処する最善の方法は次のとおりです。

#undef DELETE

Windows ヘッダーがインクルードされた後、ヘッダーがインクルードされる前のどこかにlibaws

それか、列挙名 (およびそれらが使用される可能性のある場所) を変更して、競合がないようにします。

これは、libawsおそらく Windows ターゲットで直接使用/テストされていない可能性があることを示していることに注意してください。libawsCygwin プラットフォームで少なくともいくつかの作業が行われたように見えるため、MinGW の代わりに Cygwin を使用する方がうまくいく可能性があります。

于 2012-11-21T07:47:07.460 に答える
1

まあ、あなたは明らかにWIN32あなたの中で再定義していますenumWIN32Windows プラットフォームでは事前定義されています。

編集: 実際にはログに2つのエラーがあります:

WIN32で再定義するconfig.hと、ライブラリは実際にプラットフォームごとの構成を行う方法をガイドします。

// unset WIN32 for cygwin environment
#cmakedefine CYGWIN
#ifdef CYGWIN
#  undef WIN32
#endif

2 番目の問題は、@MichaelBurr の回答で指摘されています。

于 2012-11-21T07:16:47.727 に答える