【问题标题】:Compile pthread.h stuff on AIX using g++使用 g++ 在 AIX 上编译 pthread.h 的东西
【发布时间】: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。无法重新安装编译器。

标签: c++ gcc posix aix


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-07-27
    • 2016-02-17
    • 1970-01-01
    • 2013-03-23
    • 2010-10-08
    • 1970-01-01
    • 2015-01-10
    • 2012-04-05
    • 1970-01-01
    相关资源
    最近更新 更多