maverick_GOD's blog

By maverick_GOD, history, 9 months ago, In English

I code in C++, I was a Windows user, recently switched to mac. I downloaded gcc-10 from homebrew but still, whenever I compile on any editor, it got compiled with Clang. Then I deleted Clang by going to the directory where it was stored, I thought it will then compile with GCC. But now it stops compiling and throwing error messages.

Q.Why do I wish to use gcc instead of clang? -> Clang doesn't have <bits/stdc++.h> header and while solving one question I got to know it doesn't have unordered map also (read on StackOverflow later). -> And I don't know what more is not there in clang.

Can anyone please tell me ========================= either how to successfully compile C++ using gcc on MAC or can tell me all the difference between clang and gcc and how should I manage.

Even I talked with apple care for about 45 mins and they also don't know the solution.

 
 
 
 
  • Vote: I like it
  • +8
  • Vote: I do not like it

»
9 months ago, # |
Rev. 2   Vote: I like it +8 Vote: I do not like it

I'm not sure about the case for M1. But if you type gcc-10 in your shell and it shows gcc instead of clang, you can try to append alias gcc='gcc-10' to the end of your ~/.bash_profile.

  • »
    »
    9 months ago, # ^ |
      Vote: I like it +13 Vote: I do not like it

    Actually, this doesn't work for me but after experimenting lot of stuff, I got the solution and a better understanding. I will share that in a different blog.

    Thanks, for your reply:)

»
9 months ago, # |
Rev. 2   Vote: I like it 0 Vote: I do not like it

I'm not sure about M1 too, but in MacOS with Intel processors you can install gcc with brew package manager (something like brew install gcc). After that you can use gcc-10 located at /usr/loca/bin/gcc-10.

  • »
    »
    9 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    You are correct only. For M1,gcc-10 is located at /opt/homebrew/bin/gcc-10 .

    Actually, there are many blogs and tutorials for Intel chips, and nothing available exactly for M1. I will upload one :)

    • »
      »
      »
      7 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      Still waiting :).

    • »
      »
      »
      6 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      Can you give a link to the blog. I'm waiting for it.

    • »
      »
      »
      6 months ago, # ^ |
        Vote: I like it +5 Vote: I do not like it

      brother, please upload the blog for M1. I am also facing the same problem.

    • »
      »
      »
      5 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      Could you please the blog it would be of great help.

»
6 months ago, # |
Rev. 2   Vote: I like it 0 Vote: I do not like it
  1. Install g++ through home-brew.
  2. Check out the version you just installed, probably 11th or 10th, (let's suppose it's the 11th version).
  3. Now, you can make a symbolic link from g++-11 to g++ (this is for being able to call g++-11 with just typing g++). In order to do it, just type in your terminal sudo ln -s $(which g++-11) /usr/local/bin/g++.
  4. You can do that also with gcc if you want to compile pure C code.

If you have another version of GCC, you should put it instead of 11th.

I've tested it in an intel MacBookPro; it should work in M1 too.

  • »
    »
    6 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Just one correction, use this in the 3rd step /opt/homebrew/bin/gcc-10, instead of /usr/local/bin/g++ .

    • »
      »
      »
      6 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      No. You didn't get it. /usr/local/bin/g++ is the path where I want to put g++. By other side, $(which g++-11) would be that path you mentioned.

      • »
        »
        »
        »
        6 months ago, # ^ |
          Vote: I like it 0 Vote: I do not like it

        Actually, in M1 you need to make a different path, named /opt/homebrew/bin/gcc-10.

        Remaining is same as you said.

        • »
          »
          »
          »
          »
          6 months ago, # ^ |
            Vote: I like it 0 Vote: I do not like it

          Well, if you do exactly what I said, and then make sure you have /usr/local/bin/ in the PATH variable of your shell, then you should not worry about that different path you're saying.

          Just to make it clear:

          sudo ln -s pathSource pathDestination creates a symbolic link from pathSource to pathDestination.

          $(which g++-10) returns the path for the command g++-10, that in your case is /opt/homebrew/bin/g++-10. So, the command I typed would be equivalent to sudo ln -s /opt/homebrew/bin/g++-10 /usr/local/bin/, and that's perfectly fine because AFAIR /usr/local/bin/ is part of the PATH variable by default.

          • »
            »
            »
            »
            »
            »
            6 months ago, # ^ |
              Vote: I like it +3 Vote: I do not like it

            Ohh! I got your point.

            We can do it anyways, both will work. thanks!

»
6 months ago, # |
  Vote: I like it 0 Vote: I do not like it

Actually, when I dealt with this issue, I have many sources that I have used.

But I lost them, in this long period of time...

If you have doubt in a specific part. Tell me that specific point, I will tell you the solution.

»
6 months ago, # |
  Vote: I like it 0 Vote: I do not like it

First, you need to install HomeBrew from https://brew.sh/

Then, run brew install gcc in the terminal.

After installation completed, type g++-11 in the terminal to see if the installation is successful.

Finally, to use g++ instead of g++-11, you need to type the following 4 commands:

sudo ln -s /usr/local/bin/gcc-11 /usr/local/bin/gcc

sudo ln -s /usr/local/bin/g++-11 /usr/local/bin/g++

sudo ln -s /usr/local/bin/c++-11 /usr/local/bin/c++

sudo ln -s /usr/local/bin/cpp-11 /usr/local/bin/cpp

Now everything is OK.

  • »
    »
    5 months ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Have you tried this method? The final commands are not working for me. Coz in my m1 mac, final destination of g++ file is /usr/bin instead of /usr/local/bin. Also operation to that directory is not permitted even after giving terminal full disk access.

    • »
      »
      »
      5 months ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      If you are using M1,

      /opt/homebrew/bin/gcc-11

      use this after gcc, as in M1 there is no usr/local/bin

»
5 months ago, # |
  Vote: I like it 0 Vote: I do not like it

Hey,

I use the M1 version of CLion.

The steps to install gcc via homebrew are pretty much the same as they always were.

To use gcc instead of clang within CLion, you can go to CLion -> Preferences -> Build, Execution, Deployment -> Toolchains -> C++ Compiler, and select the gcc compiler you downloaded.

»
5 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it
  1. created a file bits/stdc++.h in /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/
  2. pasted the content from here in to the file.
  3. added alias g++="g++ --std=gnu++17" to .zshrc file
  4. Now its working for me :)

Reference: link