使用 g++ 在 AIX 上编译 pthread.h 的东西

Posted

技术标签:

【中文标题】使用 g++ 在 AIX 上编译 pthread.h 的东西【英文标题】:Compile pthread.h stuff on AIX using g++ 【发布时间】:2019-07-27 11:31:32 【问题描述】:

我尝试编译这个非常简化的程序:

#include <pthread.h>

int main()
    pthread_yield();
    return 0;

使用 -pthread 就像 IBM 方面所说:

$ g++ -pthread test.cpp -o test

并得到这个错误:

test.cpp: In function 'int main()':
test.cpp:4:15: error: 'pthread_yield' was not declared in this scope
pthread_yield();

我也尝试了很多其他的错误,但到目前为止没有任何效果。 pthread.h 位于 /usr/includes 但 pthread_yield() 需要定义 _AIX_PTHREADS_D7。 我必须自己定义还是通过添加一些标志来完成?

谢谢!

【问题讨论】:

-pthread 标志应该是您所需要的。你检查过你的安装吗?可以重新安装编译器吗?您使用的是什么版本的 GCC? 如果您使用标准 C++ 线程而不是 pthreads 是否有效? 是的,您将手动定义此_AIX_PTHREADS_D7 符号。是的,有点蹩脚,但pthread_yield一个非标准扩展。 当我使用 -D_AIX_PTHREADS_D7 编译时,我得到 pthread_yield 的未定义符号错误,这至少让我更进一步,但在 /usr/lib 中显式链接到 libpthread.a 并不能解决未定义的问题符号错误。 @Galik GCC 在 AIX 7.1 上是 6.4.0。无法重新安装编译器。 【参考方案1】:

除了定义符号_AIX_PTHREADS_D7,您还必须使用库libpthreads_compat

g++ -o marscode marscode.cc -D_AIX_PTHREADS_D7 -lpthreads_compat -lpthreads

【讨论】:

以上是关于使用 g++ 在 AIX 上编译 pthread.h 的东西的主要内容,如果未能解决你的问题,请参考以下文章

使用xlC 13.1.2在AIX 7.1上编译boost C ++库

在 AIX 5.3 上编译 Python 2.6.4 时出现问题

尝试使用Powershell和MinGW MSYS在Windows上编译Carabiner。在pthreads_rwlock_t中出现gflags错误

使用 g++-5 时,protobuf 不会在 osx 上编译

在 Ubuntu Eee 上编译内核需要啥?

如何在Debian 9.3上编译Mono