gpt4 book ai didi

在 Mac 上使用 gcc 4.6.1 的 C++11

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:25:35 25 4
gpt4 key购买 nike

我是 mac 的新手,正在尝试让 gcc 4.6 工作。

我安装了 MacPorts 并安装了 gcc 4.6.1(通过执行 sudo port install gcc46)。我正在尝试编译一个简单的测试代码,该代码可以在 Linux(使用 gcc 4.6.1 和 4.6.2)和 Windows 上正常编译,但我遇到的错误让我觉得安装的库有问题。

#include <iostream>
#include <type_traits>
#include <future>

struct test {
void get() {}
};

/*template<typename Func>
test async(const Func &f) {
f();
return test();
}*/

using namespace std;

int main (int argc, const char * argv[])
{
auto t1 = async([]() -> int{
cout << "This is thread 1" << endl;
return 1;
});

auto t2 = async([]() -> int {
cout << "This is thread 2" << endl;
return 2;
});

std::cout << "This is the main thread" << endl;

t1.get();
t2.get();

return 0;
}

错误信息:

macbook01:Test fozi$ g++ main.cpp -o test -std=c++0x
main.cpp: In function 'int main(int, const char**)':
main.cpp:30:6: error: invalid use of incomplete type 'std::enable_if<true, std::future<int> >::type'
/opt/local/include/gcc46/c++/future:111:11: error: declaration of 'std::enable_if<true, std::future<int> >::type'
main.cpp:30:6: error: unable to deduce 'auto' from '<expression error>'
main.cpp:35:6: error: invalid use of incomplete type 'std::enable_if<true, std::future<int> >::type'
/opt/local/include/gcc46/c++/future:111:11: error: declaration of 'std::enable_if<true, std::future<int> >::type'
main.cpp:35:6: error: unable to deduce 'auto' from '<expression error>'
/opt/local/include/gcc46/c++/future: At global scope:
/opt/local/include/gcc46/c++/future:150:5: error: 'typename std::enable_if<(! std::is_same<typename std::decay<_Functor>::type, std::launch>::value), std::future<decltype (declval<_Fn>()((declval<_Args>)()...))> >::type std::async(_Fn&&, _Args&& ...) [with _Fn = main(int, const char**)::<lambda()>, _Args = {}, typename std::enable_if<(! std::is_same<typename std::decay<_Functor>::type, std::launch>::value), std::future<decltype (declval<_Fn>()((declval<_Args>)()...))> >::type = std::future<int>]', declared using local type 'main(int, const char**)::<lambda()>', is used but never defined [-fpermissive]
/opt/local/include/gcc46/c++/future:150:5: error: 'typename std::enable_if<(! std::is_same<typename std::decay<_Functor>::type, std::launch>::value), std::future<decltype (declval<_Fn>()((declval<_Args>)()...))> >::type std::async(_Fn&&, _Args&& ...) [with _Fn = main(int, const char**)::<lambda()>, _Args = {}, typename std::enable_if<(! std::is_same<typename std::decay<_Functor>::type, std::launch>::value), std::future<decltype (declval<_Fn>()((declval<_Args>)()...))> >::type = std::future<int>]', declared using local type 'main(int, const char**)::<lambda()>', is used but never defined [-fpermissive]

请注意,如果我使用我的虚拟异步函数,它会编译并运行良好。

我有点卡住了,我必须安装特定的库(版本)吗?我该怎么做?

最佳答案

我在 gcc-4.6.1 和 OS X 10.6 上遇到过类似的问题。问题是目前 OS X 不支持 C++0x 的线程。

查看这篇文章:c++0x, std::thread error (thread not member of std)

如果您查看“${prefix}/include/c++/4.6.1/future”头文件,您将看到以下行:

#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1) \
&& defined(_GLIBCXX_ATOMIC_BUILTINS_4)

不幸的是,_GLIBCXX_HAS_GTHREADS 在 OS X 上计算为 0。

关于在 Mac 上使用 gcc 4.6.1 的 C++11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7177887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com