• ERROR: <bits/stdc++.h>, 'cstdalign' file not found, running C++17


    Viewed 9k times
    4

    I'm trying to run a piece of code in Visual Studio Code, on macOS Catalina. The code:

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() 
    { 
        // Create an empty vector 
        vector<int> vect;  
         
        vect.push_back(10); 
        vect.push_back(20); 
        vect.push_back(30); 
      
        for (int x : vect) 
            cout << x << " "; 
      
        return 0; 
    } 
    

    When I try to run the code using the coderunner extension, I get the error:

    [Running] cd "/Users/VSC_Files/" && g++ -std=c++17 helloworld.cpp -o helloworld && "/Users/VSC_Files/"helloworld
    In file included from helloworld.cpp:1:
    /usr/local/include/bits/stdc++.h:57:10: fatal error: 'cstdalign' file not found
    #include <cstdalign>
             ^~~~~~~~~~~
    1 error generated.
    
    [Done] exited with code=1 in 1.465 seconds
    

    Apparently this is an error only for C++11, then why am I getting this error? I have the latest updated Xcode version and the latest stable build of VSCode too.

    EDITED AND ADDED LATER

    Also, I would like to add that I manually added the bits/stdc++.h file, and that it wasn't there from before.

    Also, when I change g++ -std=c++17 to just g++ when running, the program runs and shows the correct output. With a warning as shown below.
    helloworld.cpp:13:15: warning: range-based for loop is a C++11 extension [-Wc++11-extensions]

    Is there an issue with the default C++ version in mt laptop? Please help!

    5 Answers

    4

    #include<bits/stdc++.h> is an internal header for the GCC and you are not supposed to use it, it's not portable.

    remvoe the #include<bits/stdc++.h> insted write #include<vector> and #include<iostream> also remove using namespace std it considered bad practice so you code shod look like this:

    #include <vector>
    #include <iostream>
    
    int main() 
    { 
        // Create an empty vector 
        std::vector<int> vect;  
         
        vect.push_back(10); 
        vect.push_back(20); 
        vect.push_back(30); 
      
        for (int x : vect) 
            std::cout << x << " "; 
      
        return 0; 
    } 
    
    • 2
      Yes, I realise that does work. But I was wondering why the error I indicated when we use <bits/stdc++.h> was coming. Any idea? 
      – Shravan
       Jul 13, 2020 at 13:37
    • 1
      <bits/stdc++.h> is internal header could be that part of the header files its including are not in the macOS c++lib is also indecate that from the error message - he cant find "#include <cstdalign>" 
      – yaodav
       Jul 13, 2020 at 13:40
    •  
      I've added some more info, if that helps! 
      – Shravan
       Jul 14, 2020 at 0:46
    •  
      According to what version of g++ you have 4.2.1 I don't think it supports c++ 11 try updating your gcc version. 
      – yaodav
       Jul 14, 2020 at 5:59
    •  
      solved the issue, and subsequent issue comes again, so I continue comment out the error line. It worked! 
      – Jackson
       Feb 3 at 10:37
    3

    I was having the same issue. First I installed gcc via homebrew

    brew install gcc

    To avoid conflict with the existing gcc (and g++) binaries, homebrew names the binary suffixed with version. At time of this comment, the latest was gcc-10.

    You dont have to copy the bits/stdc++.h after this. Just compile using g++-<major-version-number> instead of g++, which would use the homebrew installed binary instead of the default osx one. For me it is

    g++-10 -Wall -O2 -std=c++11 test.cpp -o test

    To check the binary name that homebrew installed you can look in the /usr/local/bin directory because thats where homebrew installs packages.

    Also, make sure that usr/local/bin is before /usr/bin in your $PATH

    • 1
      Also, I am not disagreeing with the other comments saying that we should not use bits/stdc++.h and using namespace std; in our code. I put this here, because its good to know how to make it work if we have to use it.   Sep 14, 2020 at 17:47
    1

    For me it worked to comment the following lines out in the file bits/stdc++.h:

    // #include <cstdalign>
    
    ...
    
    // #include <cuchar>
    

    The file is located in /usr/local/include/bits/ as well as in /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/bits. I don't know if you have to do it in both files but the first one worked for me!


    Update Dec 24: If you use the g++ with the command line, there is no need to move any file into any directory!

    For example when I use the command: g++ custom_file.cpp it works fine! In addition you can add -std=c++11 to have the most needed functions. Also I don't have to move the bits/stdc++.h file after Xcode get's an update.

    I hope this helps!

    •  
      Any answer that recommends either editing or explicitly using the bits/stdc++.h header is, IMHO, utterly misleading.   Nov 22, 2020 at 19:26
    •  
      According to this answer MacOSX does not have the file uchar.h so you cannot #include <cuchar>. Maybe you can download it e.g. from here and paste it to the right directory. I haven't tried this yet. 
      – Chrissi
       Nov 22, 2020 at 22:43 
    1

    I too got these error, and I solved these error by commenting out the <cstdalign> part.

    After you comment out these line it will give 2 more errors - cuchar not found, and <memory_resources> not found, comment both of them using " //" . It will not harm you stdc++.h file . And it will definitely work.

    enter image description here

    0

    I am sharing steps to execute with sample code for array rotation which works with following commands

    g++-10 -Wall -O2 -std=c++11 rotatearrayusingdeque.cpp 
    

    Then a.out file gets generated.

    ./a.out
    

    sample code:

    #include <iostream>
    #include<bits/stdc++.h>
    using namespace std;
    int main() 
    {
        int n,r,i,j,temp=0,n1;
        deque<int> v;
        cin>>n>>r;  
        for(i=0;i<n;i++)
        {
            cin>>n1;
            v.push_back(n1);
            
        }
        for(j=0;j<r;j++)
        {
            temp = v.front();
            v.pop_front();
            v.push_back(temp);
        }
        for(auto x:v)
        {
            cout<<x<<" ";
        }
        cout<<endl;
    
        return 0;
    }
    

    Now, there will not be any error, Thanks

  • 相关阅读:
    MySQL主从复制(7)回顾原理、企业场景部署
    MySQL主从复制(6)故障、快速配置
    *MySQL主从复制(5)实战
    MySQL主从复制(4)原理画图深入浅出
    MySQL主从复制(3)应用场景,切换不丢数据
    MySQL主从复制(2)介绍及分布式架构
    MySQL主从复制(1)DB各种同步方案
    找到小镇的法官
    最长回文子串
    权限管理
  • 原文地址:https://www.cnblogs.com/flyingsir/p/16634686.html
Copyright © 2020-2023  润新知