How do I compile objective-C in code blocks?

Viewed 1585

I downloaded Codeblocks bundled with GCC from here

The C part is running fine

I read this wiki tutorial which says having GCC will allow me to compile objective C by just adding -lobjc to the compiler options

However, I have followed the steps mentioned in this tutorial and added the -lobjc option, but it doesn't compile

enter image description here

This is the build error message I get in codeblocks:

-------------- Build: Debug in test_prog_proj (compiler: GNU GCC Obj-C Compiler)---------------

mingw32-gcc.exe -Wall -g  -c D:\backup\cb_files\objc_files\test_prog_proj\test_prog.m -o obj\Debug\test_prog.o
mingw32-gcc.exe: error: CreateProcess: No such file or directory
Process terminated with status 1 (0 minute(s), 2 second(s))
1 error(s), 0 warning(s) (0 minute(s), 2 second(s))

As shown above, it does not show the -lobjc option

I have also tried manually compiling the above program in Windows cmd by going into the folder containing the .m file. I gave the following command:

mingw32-gcc.exe -Wall -g  -c D:\backup\cb_files\objc_files\test_prog_proj\test_prog.m -o obj\Debug\test_prog.o -lobjc 

But I get the same error in cmd

mingw32-gcc.exe: error: CreateProcess: No such file or directory  

I also tried

gcc -g -fgnu-runtime -O -c some_class.m  

that I got from here, but it gives me the same CreateProcess error. How do I start compiling Objective C code in Windows (preferably using GCC and Codeblocks) ?

--- EDIT 1 ---

I did as suggested in Mike Kinghan's answer below, and uninstalled my older Codeblocks instgallation, then reinstalled MinGW and codeblocks separately. The Codeblocks uninstall removed the Codeblocks folder in Program Files, but when I reinstalled Codeblocks again (version without MinGW bundled together), the "GNU GCC Obj-C" settings I made with the previous installation was still there, along with the -lobjc flag in the "linker settings" tab.

However, the problem is that it's still not working. I get the following error if I try to build from Codeblocks

Goto "Settings->Compiler...->Global compiler settings->GNU GCC Obj-C Compiler->Toolchain executables" and fix the compiler's setup.

Tried to run compiler executable 'C:\Program Files\CodeBlocks\MinGW/bin/mingw32-gcc.exe', but failed!

Skipping... Nothing to be done (all items are up-to-date).  

This is what Toolchains executable looks like:

enter image description here

If I try to compile it from cmd by going in to the folder with the .m file and issuing the command

mingw32-gcc.exe -Wall -g  -c D:\backup\cb_files\objc_files\test_prog_proj\test_prog.m -o obj\Debug\test_prog.o -lobjc  

it gives the error

mingw32-gcc.exe: error: CreateProcess: No such file or directory    

What is the problem here?

--- EDIT 2 ---

Following the suggestion in Mike Kinghan's answer I deleted the old instance of "GNU GCC Obj-C Compiler" in the list of compiliers, and recreated with the current version of "GNU GCC Compiler"

However, the program still does not work. This is the message I get in the build log:

-------------- Build: Debug in test_prog_proj (compiler: GNU GCC Obj-C Compiler)---------------

Linking stage skipped (build target has no object files to link)
Nothing to be done (all items are up-to-date).  

Cleaning the project and then building it again gives the same message. Trying to run the project anyway gives me a dialog box saying the project is not built, and clicking on Yes to build the project just pops the same "project not built yet" dialog box up again. The file icons in the Workspace tree of the Projects tab also seem to be grayed out:

enter image description here

This is what Toolchain Executable looks like:

enter image description here

I have added -lobjc in Linker Settings as mentioned here as well.

I right clicked the project icon in the Project tree, went to Build Options and added -lobjc in the Linker Settings as well:

enter image description here

What is the problem with this project at the moment?

--- EDIT 3 ---

I ended up completely uninstalling Codeblocks (uninstall from windows start menu, delete codeblocks folder in %APPDATA%), uninstalling MinGW (deleting the c:\MinGW folder) and reinstalling everything from scratch. I followed all the instructions in the Wiki (except the Troubleshooting section, but I think that part is irrelevant) and it still doesn't work (same problem as described in Edit 2 in this post).

How do I get Codeblocks to detect and compile obj-C code? Also, it is not showing me the compiler command line arguments when I try to build it from the Codeblocks interface. Why is this and how can I get it to show me whatever the full command line it is using?

1 Answers

The GCC program we loosely call the "the compiler" - [mingw32-](gcc|g++) - is actually a compiler/linker frontend that invokes a real language compiler and/or linker depending on what the input files and commandline options indicate you want it to do.

Input files with an .m extension indicate they are Objective C source files that are to be compiled with the GNU Objective C compiler, cc1obj. But you haven't got it. Hence the failure you see.

A GCC installation will include the C compiler cc1 and, optionally, compilers for other languages - C++, Fortran, Objective (C|C++), Go ... You say you got your MinGW GCC installation as bundled with Code::Blocks. That bundled MinGW omits the Objective C compiler, cc1obj , because the maintainers reckon it a niche language.

Best remove your CB installation and bundled MinGW and then install MinGW GCC independently from one of the rival projects:-

https://sourceforge.net/projects/mingw-w64/
https://sourceforge.net/projects/mingw/

Run the installer and ensure that you get Objective C as well as any other compilers you want.

After that, replace your CB installation it with the codeblocks-17.12-setup.exe installer (not codeblocks-17.12mingw-setup.exe), from https://sourceforge.net/projects/codeblocks/files/Binaries/17.12/Windows/. This installer includes no compilers and will auto-detect your MinGW installation.

Then proceed as you already did to create a GNU GCC Obj-C compiler setup in the CB IDE.

Later ... still not working

Your GNU GCC Obj-C compiler-setup has persisted from your previous CB install and has been rendered out-of-date by the fact that your new MinGW installation is no longer part of Code::Blocks. As you see, it still looks for the toolchain executables in C:\Program Files\Codeblocks\MinGW, whereas your new MinGW is somewhere else.

When you reinstalled Code::Blocks you should have seen its attempt to auto-detect compilers, and that it detected your MinGW toolchain in (say) C:\MinGW. It will have configured a compiler setup for GNU GCC Compiler on that basis, with the correct path to the toolchain executables. But it will not have modified any persisting compiler setups that you created yourself, such as GNU GCC Obj-C.

First check that the auto-detected setup GNU GCC Compiler is good just by creating a "Hello world" C console project and seeing that you can build it. I assume you'll be able to, but if not, then go into the GNU GCC Compiler setup yourself and manually set the Compiler's installation directory correctly.

Then, set the same Compiler's installation directory for your GNU GCC Obj-C compiler setup.

Related