2017-01-05 20 views
0

У меня есть проблемы при компиляции кода ниже на Aix машины с компилятором GCC (версия 4.7.3):Не удалось скомпилировать программу гр ++ с темы поддержки на AIX с компилятором GCC 4.7.3

SomeThread.h

#ifndef SomeThread_H 
#define SomeThread_H 

class SomeThread { 

    public: 

     SomeThread(void); 

     virtual ~SomeThread(void); 

     void runThread(); 

}; // SomeThread 

#endif // _SomeThread_H_ 

SomeThread.cpp

#include "SomeThread.h" 
#include <thread> 
#include <iostream> 


using namespace std; 

namespace { 
void foo_thread_function() { 
    for (int i = 0; i < 10; ++i) { 
     cout << "Some threaded text" << endl; 
    } 
} 
} 

SomeThread::SomeThread() { 
} // SomeThread 

SomeThread::~SomeThread() { 
} // ~SomeThread 


void SomeThread::runThread() { 
    thread foo_thread_01(foo_thread_function); 
    thread foo_thread_02(foo_thread_function); 
    thread foo_thread_03(foo_thread_function); 

    foo_thread_01.join(); 
    foo_thread_02.join(); 
    foo_thread_03.join(); 
} 

ошибка, которую я получаю следующее:

SomeThread.cpp: In member function 'void SomeThread::runThread()': 
SomeThread.cpp:58:4: error: reference to 'thread' is ambiguous 
In file included from /usr/include/sys/ptrace.h:28:0, 
       from /usr/include/sys/proc.h:42, 
       from /usr/include/sys/pri.h:43, 
       from /usr/include/sys/sched.h:38, 
       from /usr/include/sched.h:51, 
       from /opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/4.7.3/include-fixed/pthread.h:76, 
       from /opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/4.7.3/include/c++/powerpc-ibm-aix7.1.0.0/pthread/ppc64/bits/gthr-posix.h:41, 
       from /opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/4.7.3/include/c++/powerpc-ibm-aix7.1.0.0/pthread/ppc64/bits/gthr-default.h:30, 
       from /opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/4.7.3/include/c++/powerpc-ibm-aix7.1.0.0/pthread/ppc64/bits/gthr.h:150, 
       from /opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/4.7.3/include/c++/ext/atomicity.h:34, 
       from /opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/4.7.3/include/c++/memory:75, 
       from /opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/4.7.3/include/c++/thread:40, 
       from SomeThread.cpp:5: 
/usr/include/sys/thread.h:105:8: error: candidates are: struct thread 
In file included from SomeThread.cpp:5:0: 
/opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/4.7.3/include/c++/thread:60:9: error:     class std::thread 
SomeThread.cpp:58:11: error: expected ';' before 'foo_thread_01' 
SomeThread.cpp:59:4: error: reference to 'thread' is ambiguous 
In file included from /usr/include/sys/ptrace.h:28:0, 
       from /usr/include/sys/proc.h:42, 
       from /usr/include/sys/pri.h:43, 
       from /usr/include/sys/sched.h:38, 
       from /usr/include/sched.h:51, 
       from /opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/4.7.3/include-fixed/pthread.h:76, 
       from /opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/4.7.3/include/c++/powerpc-ibm-aix7.1.0.0/pthread/ppc64/bits/gthr-posix.h:41, 
       from /opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/4.7.3/include/c++/powerpc-ibm-aix7.1.0.0/pthread/ppc64/bits/gthr-default.h:30, 
       from /opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/4.7.3/include/c++/powerpc-ibm-aix7.1.0.0/pthread/ppc64/bits/gthr.h:150, 
       from /opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/4.7.3/include/c++/ext/atomicity.h:34, 
       from /opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/4.7.3/include/c++/memory:75, 
       from /opt/freeware/lib/gcc/powerpc-ibm-aix7.1.0.0/4.7.3/include/c++/thread:40, 
       from SomeThread.cpp:5: 

компилировать вышеуказанные файлы с помощью следующей командной строки:

g++ -maix64 -DTARGET=target_thread -DGENDATE=04_01_2017 -DTT_LIB_DLLSUFFIX=\".so\" -DOSNAME=\"AIX\" -D_GNU_SOURCE -D_REENTRANT -DAIX -Wno-deprecated -I. -std=gnu++11 -maix64 -pthread -mminimal-toc -fpermissive -Wno-write-strings -Winvalid-offsetof -O3 -c -oSomeThread.o SomeThread.cpp 
+1

Довольно точно, что fixincludes не обновлены для AIX 7.1. Вам нужно gcc 4.8.3-1. http://www.perzl.org/aix/index.php?n=Main.Gcc – stark

+0

@stark: В Linux мы используем gcc версии 4.7.1, и там все в порядке. Очень странное поведение. –

+0

Не работает с g ++ - 4.8.3 либо (AIX-6.1) (Если вы хотите работать с программой, вы можете использовать C-язык с pthreads) –

ответ

2

Проблема заключается в том, что существует множество реализаций thread с вашими опциями компилятора и включает в себя. Возможно, этого было бы достаточно, чтобы исправить код. SomeThread.cpp

#include "SomeThread.h" 
#include <thread> 
#include <iostream> 

//Stop using namespace std, please 
namespace SomeNamespace { 
void foo_thread_function() { 
    for (int i = 0; i < 10; ++i) { 
     cout << "Some threaded text" << endl; 
    } 
} 
} 

SomeThread::SomeThread() { 
} // SomeThread 

SomeThread::~SomeThread() { 
} // ~SomeThread 


void SomeThread::runThread() { 
    std::thread foo_thread_01(SomeNamespace::foo_thread_function); 
    std::thread foo_thread_02(SomeNamespace::foo_thread_function); 
    std::thread foo_thread_03(SomeNamespace::foo_thread_function); 

    foo_thread_01.join(); 
    foo_thread_02.join(); 
    foo_thread_03.join(); 
} 

Неоднозначные означает, что существует несколько интерпретаций одного и того же слова. Пример:

namespace Bla{ 
    struct SomeStruct{ 
    } 
} 

namespace Blub{ 
    struct SomeStruct{ 
    } 
} 

int main(){ 
    using namespace Bla; 
    using namespace Blub; 
    SomeStruct ImAmbiguous; // Problem now, which struct should the compiler choose now? 
    Bla::SomeStruct structFromBla; //Now the compiler knows which struct should be choosen 
    return 0; 
} 
+1

Абсолютно допустимые пространства имен. – stark

+0

О да, извините. Это совершенно бесполезно xD –

+0

«// Прекратить использование пространства имен std, пожалуйста» Почему? Это не в заголовке. – gurka

 Смежные вопросы

  • Нет связанных вопросов^_^