标签: libstdc++

`cosf`,`sinf`等不在`std`中

根据此处的讨论,我已向Ubuntu开发人员报告了一个错误


编译以下示例c ++程序时:

#include <cmath>
#include <stdio.h>

int main()
{
    printf("%f\n", std::cosf(0.0f));
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息: error: ‘cosf’ is not a member of ‘std’

包含math.h和使用非命名空间版本可以正常工作。到底是怎么回事?

我在Ubuntu 19.04上使用g ++ 8.3.0-6ubuntu1。

我正在与 g++ --std=c++17 test.cpp

c++ gcc libstdc++

14
推荐指数
1
解决办法
571
查看次数

为什么 clang 使用 libstdc++ 删除包含 std::optional 的类型上的显式默认构造函数?

考虑以下结构,std::optional其中包含一个绝对具有“正常”默认构造函数的类型。

#include <optional>
#include <string>

struct Foo
{
    Foo() = default;
    const std::optional<std::string> m_value;
};

bool function()
{
    Foo foo;
    return bool(foo.m_value);
}
Run Code Online (Sandbox Code Playgroud)

使用 clang 9 编译以下内容(使用系统的默认值libstdc++,对于它的 gcc 8)会给出一个意外警告:

<source>:6:5: warning: explicitly defaulted default constructor is implicitly deleted [-Wdefaulted-function-deleted]
    Foo() = default;
    ^
<source>:7:38: note: default constructor of 'Foo' is implicitly deleted because field 'm_value' of const-qualified type 'const std::optional<std::string>' (aka 'const optional<basic_string<char> >') would not be initialized
    const std::optional<std::string> m_value;
                                     ^
Run Code Online (Sandbox Code Playgroud)

Foo foo;由于它使用了所述已删除的构造函数,因此也存在硬错误。

  • 删除 …

c++ libstdc++ language-lawyer clang++ c++17

14
推荐指数
1
解决办法
266
查看次数

共享库与其接口中的STL对象的GCC兼容性

我有一个STL对象的应用程序,用作插件编写器的C++接口的一部分.

我知道兼容性的最佳选择是使用C接口,但目前不可行.

我知道libstdc ++中从GCC 3.4到4.8的所有内容在ABI方面都是高度兼容的.

因此,例如,如果我使用GCC 4.1进行编译,并且插件供应商编写使用GCC 4.7编译的代码,那么禁止角落情况一切都将在具有与GCC 4.7或更高版本相对应的libstdc ++版本的平台上完成,前提是STL用法是只有.so的内部,以及外部的.so界面使用的是纯粹的C,但对我来说情况并非如此.

所以,我很好奇关于作为插件接口的一部分使用的STL类的情况.我可以安全地在未使用相同编译器版本编译的共享对象之间传递STL对象(例如4.1和4.8)吗?如果人们使用不同的编译器选项,是否有任何关于如何编译和解决模板的问题需要注意什么?

我怀疑它会有问题.然而,GCC人员有可能以某种方式完成这项工作.

对于这个问题,我只对pre-C++ 11编译和链接感兴趣.我也只对使用GCC的Linux和Mac OS X感兴趣.

c++ gcc stl libstdc++

13
推荐指数
1
解决办法
879
查看次数

__dso_handle在哪里定义?

尝试编译我的程序时,我有一个未解决的符号错误,抱怨它无法找到__dso_handle.这个函数通常定义在哪个库中?

以下结果是否nm on libstdc++.so.6意味着包含它?

我试图链接它,但错误仍然发生.

nm libstdc++.so.6 | grep dso
00000000002fc480 d __dso_handle
Run Code Online (Sandbox Code Playgroud)

linker llvm libstdc++

13
推荐指数
2
解决办法
8428
查看次数

测试libstdc ++的版本是否使用符合C++ 11的std :: string

我正在编写一些C++ 11代码,这些代码对其性质的假设std::string是有效的,但代表了在C++ 11中改变的行为.在早期,libstdc ++的basic_string实现符合98/03的要求,但不符合更严格的C++ 11要求.

据我了解,libstdc ++修复了问题basic_string.问题是人们使用的库有许多版本没有实现此修复.而且我的代码可能会以许多不愉快的方式无声地失败.

我想有一个static_assert火,如果用户尝试编译我的图书馆对的libstdc ++的那些不符合的版本.如何检测版本,同样重要的是,我应该查找哪个版本?

c++ stdstring libstdc++ c++11

13
推荐指数
2
解决办法
814
查看次数

C++ 11随机数分布在各个平台上并不一致 - 有哪些替代方案?

我正在为标准的C++ 11引擎寻找一组可移植的发行版,比如`std :: mt19937'(参见http://en.cppreference.com/w/cpp/numeric/random).

引擎实现一致地执行(即在不同平台上生成相同的序列 - 使用Clang和MSVC进行测试),但是分布似乎在不同平台上以不同方式实现.

因此,即使引擎产生相同的序列,似乎分布(例如std::normal_distribution<double>)在不同的平台上不使用相同数量的样本(即产生不同的结果),这在我的情况下是不可接受的.

可能有一个第三方库我可以使用它遵循C++ 11随机模板,但这将在流行的平台上提供一致的值(看看GCC,MSVC和Clang/llvm的支持).

我到目前为止看到的选项是:

  • Boost.random(有点重,但值得,因为它很好地匹配c ++ 11对应物)
  • 从libstd ++克隆(也值得并且可能是可移植的,但是删除特定的函数可能并不简单)
  • 创建我自己的类似C++ 11的随机发行版

我需要制服,正常,毒药和瑞利.

c++ random boost libstdc++ c++11

13
推荐指数
1
解决办法
1196
查看次数

使用 std::call_once 抛出异常的错误

我试图从文档页面https://en.cppreference.com/w/cpp/thread/call_once运行示例,但它没有按预期工作。它会无限卡住。我想知道为什么会发生这种情况,或者它是否只是与某些特定编译器版本相关的错误。这是我用来运行程序https://repl.it/repls/UtterJubilantArchitects

#include <iostream>
#include <thread>
#include <mutex>

std::once_flag flag1, flag2;

void simple_do_once()
{
    std::call_once(flag1, [](){ std::cout << "Simple example: called once\n"; });
}

void may_throw_function(bool do_throw)
{
  if (do_throw) {
    std::cout << "throw: call_once will retry\n"; // this may appear more than once
    throw std::exception();
  }
  std::cout << "Didn't throw, call_once will not attempt again\n"; // guaranteed once
}

void do_once(bool do_throw)
{
  try {
    std::call_once(flag2, may_throw_function, do_throw);
  }
  catch (...) {
  }
}

int main()
{ …
Run Code Online (Sandbox Code Playgroud)

c++ libstdc++ c++11

13
推荐指数
1
解决办法
371
查看次数

c ++ libstd同时计算sin和cos

在C库中math.h,有一个sincos非常有效的函数,因为它在更接近单个调用sin()或者cos()调用两者的总时间的时间内计算正弦和余弦.

C++标准库中有这样的功能吗?

c++ math trigonometry libstdc++

12
推荐指数
3
解决办法
6530
查看次数

为什么g ++仍然需要-latomic

29.5原型类型的C++标准2014年11月的工作草案中,它指出:

  1. 有一个泛型类模板atomic.模板参数T的类型应该是可以轻易复制的(3.9).[注意:不能静态初始化的类型参数可能难以使用. - 尾注]

所以 - 据我所知 - 这:

#include <atomic>

struct Message {
    unsigned long int a;
    unsigned long int b;
};

std::atomic<Message> sharedState;

int main() {    
    Message tmp{1,2};       
    sharedState.store(tmp);         
    Message tmp2=sharedState.load();
}
Run Code Online (Sandbox Code Playgroud)

应该是完全有效的标准c ++ 14(以及c ++ 11)代码.但是,如果我没有libatomic手动链接,那么命令

g++ -std=c++14 <filename>
Run Code Online (Sandbox Code Playgroud)

给出 - 至少在Fedora 22(gcc 5.1)上 - 以下链接错误:

/tmp/ccdiWWQi.o: In function `std::atomic<Message>::store(Message, std::memory_order)':
main.cpp:(.text._ZNSt6atomicI7MessageE5storeES0_St12memory_order[_ZNSt6atomicI7MessageE5storeES0_St12memory_order]+0x3f): undefined reference to `__atomic_store_16'
/tmp/ccdiWWQi.o: In function `std::atomic<Message>::load(std::memory_order) const':
main.cpp:(.text._ZNKSt6atomicI7MessageE4loadESt12memory_order[_ZNKSt6atomicI7MessageE4loadESt12memory_order]+0x1c): undefined reference to `__atomic_load_16'
collect2: error: ld returned 1 exit status …
Run Code Online (Sandbox Code Playgroud)

c++ g++ libstdc++ c++11 stdatomic

12
推荐指数
1
解决办法
3658
查看次数

gcc中的默认构造内联静态随机数引擎

例如,

#include <random>

struct stru {
  //inline static std::mt19937 rnd; Oops!
  inline static std::mt19937 rnd{};  
};

int main() {

}
Run Code Online (Sandbox Code Playgroud)

我发现两者没有语义差异,而clang在编译两者时没有问题.然而,gcc 8.1为第一个产生以下错误:

prog.cc:4:30: error: no matching function for call to 'std::mersenne_twister_engine<long unsigned int, 32, 624, 397, 31, 2567483615, 11, 4294967295, 7, 2636928640, 15, 4022730752, 18, 1812433253>::mersenne_twister_engine()'
   inline static std::mt19937 rnd;
                              ^~~
In file included from /opt/wandbox/gcc-8.1.0/include/c++/8.1.0/random:49,
                 from prog.cc:1:
/opt/wandbox/gcc-8.1.0/include/c++/8.1.0/bits/random.h:437:11: note: candidate: 'constexpr std::mersenne_twister_engine<long unsigned int, 32, 624, 397, 31, 2567483615, 11, 4294967295, 7, 2636928640, 15, 4022730752, 18, 1812433253>::mersenne_twister_engine(const …
Run Code Online (Sandbox Code Playgroud)

c++ gcc inline libstdc++ c++17

12
推荐指数
1
解决办法
218
查看次数

标签 统计

libstdc++ ×10

c++ ×9

c++11 ×4

gcc ×3

c++17 ×2

boost ×1

clang++ ×1

g++ ×1

inline ×1

language-lawyer ×1

linker ×1

llvm ×1

math ×1

random ×1

stdatomic ×1

stdstring ×1

stl ×1

trigonometry ×1