C/C++教程

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

本文主要是介绍ERROR: <bits/stdc++.h>, 'cstdalign' file not found, running C++17,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Modified 1 year, 1 month ago 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!

c++xcodec++11visual-studio-codec++17 se-share-sheet#willShow s-popover:shown->se-share-sheet#didShow" data-controller="se-share-sheet s-popover" data-gps-track="post.click({ item: 2, priv: 0, post_type: 1 })" data-s-popover-placement="bottom-start" data-se-share-sheet-license-name="CC BY-SA 4.0" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f4.0%2f" data-se-share-sheet-location="1" data-se-share-sheet-post-type="question" data-se-share-sheet-social="facebook twitter devto" data-se-share-sheet-subtitle="" data-se-share-sheet-title="Share a link to this question" title="Short permalink to this question" href="https://stackoverflow.com/q/62876806" rel="external nofollow" target="_blank">Share Improve this question   edited Jul 14, 2020 at 0:44     asked Jul 13, 2020 at 13:23 user avatar Shravan 7511 silver badge77 bronze badges
  • 9 dont ever use #include <bits/stdc++.h>  – yaodav  Jul 13, 2020 at 13:26
  • 1 @yaodav 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:36
  •   I'm amazed that a search for bits/stdc++.h on SO does not give you an almost daily hit for a similar question  – rioV8  Jul 13, 2020 at 14:48
  • 2 Reopened. This header is of course not portable, but if it's there, it should work...  – HolyBlackCat  Jul 13, 2020 at 15:04 
  •   What does g++ --version print for you?  – HolyBlackCat  Jul 13, 2020 at 15:06
Show 7 more comments

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; 
} 
se-share-sheet#willShow s-popover:shown->se-share-sheet#didShow" data-controller="se-share-sheet s-popover" data-gps-track="post.click({ item: 2, priv: 0, post_type: 2 })" data-s-popover-placement="bottom-start" data-se-share-sheet-license-name="CC BY-SA 4.0" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f4.0%2f" data-se-share-sheet-location="2" data-se-share-sheet-post-type="answer" data-se-share-sheet-social="facebook twitter devto" data-se-share-sheet-subtitle="" data-se-share-sheet-title="Share a link to this answer" title="Short permalink to this answer" href="https://stackoverflow.com/a/62876931" rel="external nofollow" target="_blank">Share Improve this answer   edited May 19, 2021 at 13:14     answered Jul 13, 2020 at 13:31 user avatar yaodav 1,05688 silver badges2626 bronze badges
  • 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
Add a comment 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

se-share-sheet#willShow s-popover:shown->se-share-sheet#didShow" data-controller="se-share-sheet s-popover" data-gps-track="post.click({ item: 2, priv: 0, post_type: 2 })" data-s-popover-placement="bottom-start" data-se-share-sheet-license-name="CC BY-SA 4.0" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f4.0%2f" data-se-share-sheet-location="2" data-se-share-sheet-post-type="answer" data-se-share-sheet-social="facebook twitter devto" data-se-share-sheet-subtitle="" data-se-share-sheet-title="Share a link to this answer" title="Short permalink to this answer" href="https://stackoverflow.com/a/63889347" rel="external nofollow" target="_blank">Share Improve this answer   answered Sep 14, 2020 at 17:45 user avatar Himanshu Tanwar 36822 silver badges1616 bronze badges
  • 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.  – Himanshu Tanwar  Sep 14, 2020 at 17:47
Add a comment 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!

se-share-sheet#willShow s-popover:shown->se-share-sheet#didShow" data-controller="se-share-sheet s-popover" data-gps-track="post.click({ item: 2, priv: 0, post_type: 2 })" data-s-popover-placement="bottom-start" data-se-share-sheet-license-name="CC BY-SA 4.0" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f4.0%2f" data-se-share-sheet-location="2" data-se-share-sheet-post-type="answer" data-se-share-sheet-social="facebook twitter devto" data-se-share-sheet-subtitle="" data-se-share-sheet-title="Share a link to this answer" title="Short permalink to this answer" href="https://stackoverflow.com/a/64958149" rel="external nofollow" target="_blank">Share Improve this answer   edited Dec 24, 2020 at 0:03     answered Nov 22, 2020 at 18:50 user avatar Chrissi 16111 silver badge66 bronze badges
  •   Any answer that recommends either editing or explicitly using the bits/stdc++.h header is, IMHO, utterly misleading.  – Adrian Mole  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 
Add a comment 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

se-share-sheet#willShow s-popover:shown->se-share-sheet#didShow" data-controller="se-share-sheet s-popover" data-gps-track="post.click({ item: 2, priv: 0, post_type: 2 })" data-s-popover-placement="bottom-start" data-se-share-sheet-license-name="CC BY-SA 4.0" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f4.0%2f" data-se-share-sheet-location="2" data-se-share-sheet-post-type="answer" data-se-share-sheet-social="facebook twitter devto" data-se-share-sheet-subtitle="" data-se-share-sheet-title="Share a link to this answer" title="Short permalink to this answer" href="https://stackoverflow.com/a/68359326" rel="external nofollow" target="_blank">Share Improve this answer   edited Jul 13, 2021 at 13:17 user avatar Cristik 29.2k2424 gold badges8686 silver badges122122 bronze badges answered Jul 13, 2021 at 8:52 user avatar Archies Singh 1111 bronze badge Add a comment 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

这篇关于ERROR: <bits/stdc++.h>, 'cstdalign' file not found, running C++17的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!