• 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

  • 相关阅读:
    14_java之变量|参数|返回值|修饰符
    NYOJ 202 红黑树 (二叉树)
    NYOJ 138 找球号(二) (哈希)
    NYOJ 136 等式 (哈希)
    NYOJ 133 子序列 (离散化)
    NYOJ 129 树的判定 (并查集)
    NYOJ 117 求逆序数 (树状数组)
    NYOJ 93 汉诺塔 (数学)
    HDU 2050 折线分割平面 (数学)
    天梯赛L2-008 最长对称子串 (字符串处理)
  • 原文地址:https://www.cnblogs.com/flyingsir/p/16634686.html
Copyright © 2020-2023  润新知