gdk (gtk3) in codeblocks on windows 7 - c++

I have configured gtk3+ (I've changed gtk2+ to gtk3+) in codeblocks 13.2 on windows 7,
and created new gtk+ (exmaple) project. This example projcet was compiled and works properly.
Next I included gdk:
#include <gdk/gdk.h>
But when I added the lines:
gdk_init(&argc, &argv);
GdkScreen *screen = gdk_screen_get_default();`
I got 2 errors:
undefined referrence to 'gdk_init' and
undefined referrence to 'gdk_screen_get_default'
Where is the problem? I'm looking for a concrete solution.
compilation log:
||=== Build: Debug in gtk4test (compiler: GNU GCC Compiler) ===|
C:\myp\gtk4test\main.c||In function 'main':|
C:\myp\gtk4test\main.c|37|warning: 'gtk_vbox_new' is deprecated (declared at C:\gtk\include\gtk-3.0/gtk/deprecated/gtkvbox.h:60): Use 'gtk_box_new' instead [-Wdeprecated-declarations]|
C:\myp\gtk4test\main.c|53|warning: unused variable 'screen' [-Wunused-variable]|
obj\Debug\main.o||In function `main':|
C:\myp\gtk4test\main.c|52|undefined reference to `gdk_init'|
C:\myp\gtk4test\main.c|53|undefined reference to `gdk_screen_get_default'|
||=== Build failed: 2 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|

If you have already called gtk_init, then you shouldn't call gdk_init (as gtk_init also calls it). Generally, you should just call the gdk functions.
If you need gdk_init() for some reason, you will have to add
gcc ... `pkg-config --libs --cflags gdk-3.0` ...
to the compilation line. Note that you probably also have to reconfigure your IDE to use gdk3 instead of gdk2.

Related

Codeblocks doesn't support glfw3?

I'm learning opengl and wanted to use Codeblocks IDE because visual studio seems too laggy and slow. After starting a console application project i've tried to link GLFW3 library to make this code run:
#include <GLFW/glfw3.h>
#include <thread>
int main()
{
glfwInit();
std::this_thread::sleep_for(std::chrono::seconds(1));
glfwTerminate();
}
I use GNU GCC 32-bit Compiler from MinGW(one that comes with codeblocks installation). I'm pretty certain that i've done everything correctly, i've read through like every article that i was able to find explaining how to setup codeblocks for opengl. I've linked libglfw3.a and libglfw3dll.a and set up correct search directories for compiler and linker but i always get this undefined reference error no matter what:
-------------- Build: Debug in glfw_again_test (compiler: GNU GCC Compiler)---------------
g++.exe -L"C:\Program Files\CodeBlocks\MinGW\lib" -o bin\Debug\glfw_again_test.exe obj\Debug\main.o "C:\Program Files\CodeBlocks\MinGW\lib\libglfw3.a" "C:\Program Files\CodeBlocks\MinGW\lib\libglfw3dll.a" "C:\Program Files\CodeBlocks\MinGW\x86_64-w64-mingw32\lib\libopengl32.a"
obj\Debug\main.o: In function `main':
C:/dev/OpenGL/CodeBlocks/glfw_again_test/main.cpp:6: undefined reference to `glfwInit'
C:/dev/OpenGL/CodeBlocks/glfw_again_test/main.cpp:8: undefined reference to `glfwTerminate'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 1 second(s))
3 error(s), 0 warning(s) (0 minute(s), 1 second(s))
I have no idea what else i could try to fix this problem.
Apparently i was mistaken and thought that i use 32-bit MinGW compiler but seems like i accidentally installed 64-bit one with codeblocks. After switching to mingw gcc 32-bit compiler and rebuilding(simple build will lead to an error) my project i finally got it to work(not exactly this code snippet but another sample one).

C++ can't compile when I use iostream (Linux, CodeBlocks)

I want to use C++ Code in Java. I know I have to use JNI. And now I want to compile a shared library in C++ on Linux. I using the Code::Blocks 16.01 IDE and the GNU GCC Compiler.
And now I want to compile this very simple code:
#include <iostream>
void sayHello ()
{
std::cout << "Hello from C++" << std::endl;
}
(I know that I also have to include some more to use this library later in java, but this was just my first test, if it compiles)
The Build log is:
g++ -shared obj/Debug/main.o -o bin/Debug/libnativetest.so
/usr/bin/ld: obj/Debug/main.o: Die Umlagerung von
obj/Debug/main.o: error adding symbols: Ungültiger Wert
collect2: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 0 second(s))
1 error(s), 0 warning(s) (0 minute(s), 0 second(s))
The Build messages:
||error: ld returned 1 exit status|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
When I just compile the method without#include <iostream> (and sure without cout) it works.
I have tested with another header file like #include <string> and this works.
When I create a project not as a shared library instead a Console Application I can use <iostream>.
I am new to C++ and Code::Blocks therefore if you need some more info please help me where I can find this information.
I do not use Code blocks, so I have no idea how it decided to leave out the fPIC flag. If you try to build it on the command line with
g++ main.cpp -o main.o
The gcc (v5.4 in my case) prompts you to add -fPIC flag, with with the error disappears and the compilation succeeds. fPIC stands for position independent code. i.e., the function addresses (jump addresses) are not hard coded but are left blank. The loader, when it needs the .so, loads it to the memory and then fills the jump addresses dynamically. (-fpic could also work, it is for short jumps, whereas fPIC accommodates also long jumps, i.e., bigger jump ranges at the cost of binary size.)

Static linking OpenSSL and cURL with Autotools and MinGW

I'm trying to build a statically linked OpenSSL + LibCurl console application with CodeBlocks. However, I can't get it to work. I keep getting these errors:
||=== Build: Debug in Filer (compiler: GNU GCC Compiler) ===|
C:\MinGW\msys\1.0\local\lib\libcurl.a(libcurl_la-openssl.o)|| undefined reference to `SSL_get0_alpn_selected'|
C:\MinGW\msys\1.0\local\lib\libcurl.a(libcurl_la-openssl.o)|| undefined reference to `SSL_CTX_set_alpn_protos'|
C:\MinGW\msys\1.0\local\lib\libcurl.a(libcurl_la-openssl.o)|| undefined reference to `SSL_CTX_set_next_proto_select_cb'|
C:\MinGW\msys\1.0\local\lib\libcurl.a(libcurl_la-openssl.o)|| undefined reference to `SSL_CTX_set_srp_username'|
C:\MinGW\msys\1.0\local\lib\libcurl.a(libcurl_la-openssl.o)|| undefined reference to `SSL_CTX_set_srp_password'|
C:\MinGW\msys\1.0\local\lib\libcurl.a(libcurl_la-openssl.o)|| undefined reference to `SSL_COMP_free_compression_methods'|
||=== Build failed: 6 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
This is the build log:
mingw32-g++.exe -o bin\Debug\Filer.exe "obj\Debug\MinGW Sources\BASE64\base64.o
" "obj\Debug\MinGW Sources\SQLite\sqlite3.o" obj\Debug\Users\thoma\Desktop\Filer
\main.o -static -lcurl -lrtmp -lidn -lssl -lssh2 -lcrypto -lz -lwldap32 -lws2_
32 -lwinmm -lgdi32 C:\MinGW\msys\1.0\local\lib\libcrypto.dll.a C:\MinGW\msys\1.0
\local\lib\libcurl.a C:\MinGW\msys\1.0\local\lib\libcurl.dll.a C:\MinGW\msys\1.0
\local\lib\libssl.a C:\MinGW\msys\1.0\local\lib\libssl.dll.a C:\MinGW\msys\1.0\l
ocal\lib\libwxjpeg-3.0.a C:\MinGW\msys\1.0\local\lib\libwxpng-3.0.a C:\MinGW\msy
s\1.0\local\lib\libwxscintilla-3.0.a C:\MinGW\msys\1.0\local\lib\libwxtiff-3.0.a
C:\MinGW\msys\1.0\local\lib\libz.a C:\MinGW\msys\1.0\local\lib\libz.dll.a
I have used the set-up which is outlined here.
Some pictures of my setup:
You have a mismatch between your OpenSSL version and the OpenSSL version used by libcurl.

Unable to compile .f (fortran file) in codeblocks 13.12

I am trying to execute give fortran code in Code::Blocks on Windows 8
program main
write (*,*) "hi"
stop
end
The error I am getting is
G:\Study\Programs\bairstow.o:bairstow.f undefined reference to `_gfortran_st_write'
G:\Study\Programs\bairstow.o:bairstow.f undefined reference to `_gfortran_transfer_character_write'
G:\Study\Programs\bairstow.o:bairstow.f undefined reference to `_gfortran_st_write_done'
G:\Study\Programs\bairstow.o:bairstow.f undefined reference to `_gfortran_stop_string'
G:\Study\Programs\bairstow.o:bairstow.f undefined reference to `_gfortran_set_args'
G:\Study\Programs\bairstow.o:bairstow.f undefined reference to `_gfortran_set_options'
=== Build failed: 6 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===
I copy pasted the .f file in the folder of the compiler itself and executed the command
gfortran.exe hello.f
The output .exe file is successfully generated and executed.
I am not sure if I have setup the compiler properly in C::B. What I might be missing?
UPDATE :
As suggested by janneb, I added the linker library path so as to use libgfortran-3.dll.
The file gets compiled successfully with the following build log :
mingw32-g++.exe -c G:\Study\Programs\bairstow.f -o G:\Study\Programs\bairstow.o
mingw32-g++.exe -o G:\Study\Programs\bairstow.exe G:\Study\Programs\bairstow.o "C:\Program Files (x86)\CodeBlocks\MinGW\bin\libgfortran-3.dll"
Process terminated with status 0 (0 minute(s), 1 second(s))
0 error(s), 0 warning(s) (0 minute(s), 1 second(s))
When I execute the file, after waiting for about 2 minutes, I get the following error:
Have I made any mistake in linking the library file?
Hint : It has messed up with my GNU C Compiler also. Now even after unlinking the libgfortran-3.dll, I can't execute a simple helloWorld.c program.
Open C::B IDE and Go to "Settings" and Select "GNU Fortran Compiler" From Selected Compiler and Clik the button "Set as default" and finally click "Ok"
Based on the error message you're not linking the GFortran runtime library (libgfortran) when compiling via C::B. The gfortran.exe driver program automatically handles this, so most likely you're compiling with gcc.exe, which based on the file extension can invoke the Fortran compiler (f951), but doesn't do the linking stuff that gfortran.exe does.
Anyway, I have never used C::B nor gfortran on Windows, but hopefully the above explanation gives you a hint where to start looking.
In my case I had to do an additional step. Go to Project->Build options-> select the GNU Fortran Compiler as well.

undefined references SDL with Code::Blocks [duplicate]

This question already has answers here:
What is an undefined reference/unresolved external symbol error and how do I fix it?
(39 answers)
Closed 8 years ago.
I was following http://lazyfoo.net/tutorials/SDL/01_hello_SDL/windows/codeblocks/index.php tutorial on how to use SDL with Code::Blocks since I've been having trouble with this in pretty much every damn IDE I've tried.
The tutorial is pretty straight forward, on step number 7 it states
"we have to tell the compiler to link against the libraries. Go under Linker Settings and paste -lmingw32 -lSDL2main -lSDL2". I did exactly that. Then it says that if you get a bunch of undefined reference errors, you messed up this step, I don't really see how it is possible for me to mess up this step, since it is a simple step.
I would really like to get started with this, while using MinGW and Code::Blocks.
Information that might help resolve this:
I have MinGW directory located in my C:
I have a folder SDL in my C: directory, within that folder I am linking the include and lib files from SDL to Code::BLocks by right clicking on project properties and adding the directories. This all seems to be working fine.Include Directory = C:\SDL\SDL2-2.0.3\x86_64-w64-mingw32\include\SDL2 Lib Directory = C:\SDL\SDL2-2.0.3\x86_64-w64-mingw32\lib
As stated above, on the Linker Setting -> Other Linker Options: I wrote -lmingw32 -lSDL2main -lSDL2, yet I get a bunch of reference errors. I don't know what to try, I have been searching online for hours, I even replaced SDL_platform.h because it was causing issues and the undefined references are still there.
Please help. This is the code I am using to check if SDL is working, it isn't.
#include "SDL.h"
#include <iostream>
#include <cstdio>
#include <Windows.h>
int main( int argc, char* argv[])
{
// Fire up SDL, this starts all subsystems; audio video etc.
if ( SDL_Init(SDL_INIT_EVERYTHING) < 0 ) {
fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError());
exit(1);
}
// Now Shut it down
atexit(SDL_Quit);
return 0;
}
These are the errors I am getting:
-------------- Build: Debug in TITLE (compiler: GNU GCC Compiler)---------------
mingw32-g++.exe -Wall -g -IC:\SDL\SDL2-2.0.3\x86_64-w64-mingw32\include\SDL2 -c C:\Users\Bryan\Desktop\CodeBlocks\TITLE\main.cpp -o obj\Debug\main.o
mingw32-g++.exe -LC:\SDL\SDL2-2.0.3\x86_64-w64-mingw32\lib -o bin\Debug\TITLE.exe obj\Debug\main.o -lmingw32 -lSDL2main -lSDL2
obj\Debug\main.o: In function `SDL_main':
C:/Users/Bryan/Desktop/CodeBlocks/TITLE/main.cpp:10: undefined reference to `SDL_Init'
C:/Users/Bryan/Desktop/CodeBlocks/TITLE/main.cpp:11: undefined reference to `SDL_GetError'
C:/Users/Bryan/Desktop/CodeBlocks/TITLE/main.cpp:15: undefined reference to `SDL_Quit'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/lib/libmingw32.a(main.o): In function `main':
e:\p\giaw\src\pkg\mingwrt-4.0.3-1-mingw32-src\bld/../mingwrt-4.0.3-1-mingw32-src/src/libcrt/crt/main.c:91: undefined reference to `WinMain#16'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 0 second(s))
4 error(s), 0 warning(s) (0 minute(s), 0 second(s))
You have created a Windows executable project. The wizard set the entry point to WinMain. Your code implements a command line program with main(int argc, char**argv) as entry point.
If you want to stay with the main you should create a new command line project and add you
source files to this project. Alternativly you could try to change the project type.
For the SDL errors you should check, that you use matching compiler and libraries (32 vs. 64 bit).