2017-03-13 27 views
1

http://www.dre.vanderbilt.edu/~schmidt/DOC_ROOT/ACE/ACE-INSTALL.html#mingw의 단계를 따라 MinGW을 사용하여 ACE (Adaptive Communication Environment) 6.4.2를 구축 중입니다. 나는 Windows10 64 비트 운영 체제를 사용합니다. 나는 C++ 프로젝트를 구축하는 데있어 매우 새로운 것이다.MinGW를 사용하는 ACE (Adaptive Communication Environment) 구축

https://sourceforge.net/projects/mingw/files/에서 MinGW를 설치했습니다. 32 비트 버전이라고 생각합니다. MinGW 설치 관리자를 사용하여 모든 패키지를 다운로드했습니다.

http://download.dre.vanderbilt.edu/에서 ACE 6.4.2 다운로드 E로 추출 : /dependencies/ACE-6.4.2

enter image description here

MinGW의 루트 레벨 폴더 구조는 아래와 같다. 시스템 변수 path에 /dependencies/MinGW/msys/1.0/bin :/종속 /는 MinGW/bin 및 E : enter image description here

나는 E를 포함한다.

  1. 열고 MSYS shell :

    나는 다음 단계를했다. 는 MinGW의 bin 디렉토리에 PATH 환경 변수를 설정 :

    export PATH=/e/dependencies/MinGW/bin:$PATH

  2. 추가 ACE_ROOT 환경 변수를 가리키는 ACE 래퍼 소스 트리의 루트 :

    export ACE_ROOT=/e/dependencies/ACE-6.4.2/ACE_wrappers

  3. 파일을 생성은에 config.h라고 #include "ace/config-win32.h"

  4. 다음을 포함하는 $ACE_ROOT/ace 디렉토리 MSYS 쉘에서

  5. include $(ACE_ROOT)/include/makeinclude/platform_mingw32.GNU INSTALL_PREFIX=/e/dependencies/ACE-6.4.2-install

    cd $ACE_ROOT/ace make

내가 이해 한 것은 내 그 g++입니다 : 파일을 만든

  • 가 포함 된 $ACE_ROOT/include/makeinclude 디렉토리에 platform_macros.GNU라고 MinGW이 사용됩니다.

    그리고 오류가

    make[3]: Entering directory 'e:/dependencies/ACE-6.4.2/ACE_wrappers/ace' 
    
    GNUmakefile: /e/dependencies/ACE-6.4.2/ACE_wrappers/ace/GNUmakefile.ACE MAKEFLAGS=w 
    
    g++ -Wnon-virtual-dtor -O3 -g -mthreads -mtune=pentiumpro -fno-strict-aliasing -Wall -W -Wpointer-arith -pipe -DACE_HAS_CUSTOM_EXPORT_MACROS=0 -Wno-unknown-pragmas -Ie:/dependencies/ACE-6.4.2/ACE_wrappers -DACE_NO_INLINE -I.. -DACE_BUILD_DLL -c -o .shobj/Local_Name_Space.o Local_Name_Space.cpp 
    In file included from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/os_include/os_sched.h:25:0, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/OS_NS_Thread.h:30, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Thread_Mutex.h:29, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Log_Category.h:18, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Malloc.h:22, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Malloc_T.h:16, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Local_Name_Space.h:18, 
           from Local_Name_Space.cpp:1: 
    e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/os_include/os_time.h:56:16: error: redefinition of 'struct timespec' 
    typedef struct timespec 
           ^
    In file included from e:\dependencies\mingw\include\sys\time.h:3:0, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/os_include/sys/os_time.h:28, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/os_include/sys/os_resource.h:25, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/os_include/sys/os_wait.h:26, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/os_include/os_stdlib.h:27, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Basic_Types.h:54, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Log_Msg.h:26, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Log_Category.h:17, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Malloc.h:22, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Malloc_T.h:16, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Local_Name_Space.h:18, 
           from Local_Name_Space.cpp:1: 
    e:\dependencies\mingw\include\time.h:102:8: error: previous definition of 'struct timespec' 
    struct timespec 
         ^
    In file included from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Local_Name_Space_T.cpp:15:0, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Local_Name_Space_T.h:259, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Local_Name_Space.h:126, 
           from Local_Name_Space.cpp:1: 
    e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/OS_NS_unistd.h:322:45: warning: 'useconds_t' is deprecated [-Wdeprecated-declarations] 
             useconds_t interval = 0); 
                  ^
    In file included from e:\dependencies\mingw\include\wchar.h:66:0, 
           from e:\dependencies\mingw\lib\gcc\mingw32\5.3.0\include\c++\cwchar:44, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/ace_wchar.h:43, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/config-lite.h:33, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/ACE_export.h:10, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Malloc.h:16, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Malloc_T.h:16, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Local_Name_Space.h:18, 
           from Local_Name_Space.cpp:1: 
    e:\dependencies\mingw\include\sys\types.h:221:23: note: declared here 
    typedef unsigned long useconds_t __MINGW_ATTRIB_DEPRECATED; 
            ^
    In file included from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Local_Name_Space_T.cpp:15:0, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Local_Name_Space_T.h:259, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Local_Name_Space.h:126, 
           from Local_Name_Space.cpp:1: 
    e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/OS_NS_unistd.h:322:45: warning: 'useconds_t' is deprecated [-Wdeprecated-declarations] 
             useconds_t interval = 0); 
                  ^
    e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/OS_NS_unistd.h:322:45: warning: 'useconds_t' is deprecated [-Wdeprecated-declarations] 
    e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/OS_NS_unistd.h:326:78: warning: 'useconds_t' is deprecated [-Wdeprecated-declarations] 
             const ACE_Time_Value &tv_interval = ACE_Time_Value::zero); 
                          ^
    In file included from e:\dependencies\mingw\include\wchar.h:66:0, 
           from e:\dependencies\mingw\lib\gcc\mingw32\5.3.0\include\c++\cwchar:44, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/ace_wchar.h:43, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/config-lite.h:33, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/ACE_export.h:10, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Malloc.h:16, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Malloc_T.h:16, 
           from e:/dependencies/ACE-6.4.2/ACE_wrappers/ace/Local_Name_Space.h:18, 
           from Local_Name_Space.cpp:1: 
    e:\dependencies\mingw\include\sys\types.h:221:23: note: declared here 
    typedef unsigned long useconds_t __MINGW_ATTRIB_DEPRECATED; 
            ^
    e:/dependencies/ACE-6.4.2/ACE_wrappers/include/makeinclude/rules.local.GNU:188: recipe for target '.shobj/Local_Name_Space.o' failed 
    make[3]: *** [.shobj/Local_Name_Space.o] Error 1 
    make[3]: Leaving directory 'e:/dependencies/ACE-6.4.2/ACE_wrappers/ace' 
    GNUmakefile:45: recipe for target 'ACE' failed 
    make: *** [ACE] Error 2 
    

    로그는 궁극적으로 내가 ACE를 사용하여 응용 프로그램 개발을위한 QT Creator를 사용해야합니다. 그리고 MinGw 32 비트 버전의 QT 빌드 만 찾을 수있었습니다. 그래서 저는 ACE 구축을 위해 MinGW 32 비트를 선택했습니다.

  • +0

    아마도 조금 더 직접 살펴 봐야 할 것입니다. 소스 코드에서 C++ 코드를 컴파일 해 본 경험이 있습니까? MingW의 어떤 버전을 GCC 버전으로 사용하고 있습니까? 둘째, 첫 번째 중요한 오류를보고 하시겠습니까? 두 번째 오류를 설명 할 수없는 이전 오류가있을 수 있습니다. 빌드 로그에서 두 번째 또는 일흔 초의 오류를 디버깅하는 것은 의미가 없습니다. make의 출력을 로그 파일로 재지 정하여 pastebin에 붙여넣고 검토 할 수 있습니다. –

    +0

    오류없이 MinGW-64 (http://mingw-w64.org/doku.php 참조)를 사용하여 매일 ACE를 컴파일합니다. 어떤 ACE 버전, 어떤 MinGW, 어떻게 설정했는지에 대한 세부 사항을 제공해주세요. –

    +0

    아마도 새로운 mingw 버전 일 것입니다.'g ++ --version'의 출력은 무엇입니까? ace/config.h 파일의 맨 위에'#define ACE_HAS_POSIX_TIME 1'을 추가하십시오. –

    답변

    0

    timespec 재정의와 동일한 문제가 발생했습니다. git-bashtdm-gcc-5.1.0-3을 사용하고 있습니다. 내 경우에는 timespecpthread.hace/os_include/os_time.h에 모두 정의되어 있습니다.그것을 해결하는 한 가지 방법은 ace/config.h을 편집하는 것입니다 :

    // Get 'timespec' explicitly from here. 
    #include <pthread.h> 
    
    // Tell ACE to do not declare 'timespec'. 
    #define ACE_HAS_POSIX_TIME 1 
    
    // Tell ACE to declare 'timespec_t' alias. 
    #define ACE_LACKS_TIMESPEC_T 1 
    
    // Default windows config, see ACE install manual. 
    #include "ace/config-win32.h" 
    

    내 경우에는 작동하지 않았다 HAVE_STRUCT_TIMESPEC를 사용하는 접근 방법. 일반적으로 it is not a good solution입니다.

    당신이 다음 time.h에 정의 timespec를 얻을 수 있습니다, 모두 mingw-get에서 설치 mingw + msys를 사용하는 경우. 해결 방법은 비슷합니다.

    // Tell ACE to do not declare 'timespec'. 
    #define ACE_HAS_POSIX_TIME 1 
    
    // Tell ACE to declare 'timespec_t' alias. 
    #define ACE_LACKS_TIMESPEC_T 1 
    
    // Default windows config, see ACE install manual. 
    #include "ace/config-win32.h" 
    

    도움이되지 않는다면 ace/os_include/os_time.h을 살펴보십시오. 문제에 적합한 특정 매크로를 찾을 수 있습니다. tdmgit-bash를 사용할 때 보조 노트로


    , 내가 링크 오류를 받고 있어요. 꽤 이상하게 보입니다. 왜 그런 일이 벌어지는 지 아직 모르겠습니다. 예를 들어,

    ACE-6.3.2을 위해 :

    C:/TDM-GCC-32/bin/../lib/gcc/mingw32/5.1.0/../../../../mingw32/bin/ld.exe: cannot find .: Permission denied 
    collect2.exe: error: ld returned 1 exit status 
    

    ACE-6.4.0에 대한 :

    g++.exe: error: .shobj/Filecac: No such file or directory 
    

    ACE-6.4.6에 대한 :

    g++.exe: error: .shobj/Co: No such file or directory 
    

    mingw 동안 msys 성공적으로 빌드를 제공합니다.