0Day Forums
libSDL, CMake and Mac OS X Lion - Printable Version

+- 0Day Forums (https://0day.red)
+-- Forum: Coding (https://0day.red/Forum-Coding)
+--- Forum: FrameWork (https://0day.red/Forum-FrameWork)
+--- Thread: libSDL, CMake and Mac OS X Lion (/Thread-libSDL-CMake-and-Mac-OS-X-Lion)



libSDL, CMake and Mac OS X Lion - imp197 - 07-20-2023

I'm trying to compile a cmake project on my mac, but it depends on the SDL framework. I installed this framework and after cmake then reported to me libSDL was not found I set following export variables myself (as suggested by cmake):

export SDL_INCLUDE_DIR=/Library/Frameworks/SDL.framework/
export SDLIMAGE_LIBRARY=/Library/Frameworks/SDL_image.framework/
export SDLIMAGE_INCLUDE_DIR=/Library/Frameworks/SDL_image.framework/Headers
Now cmake does it job, but when I run make, I get the following message:

Mats-MBP:build mats$ make
Linking CXX executable SDLExample
Undefined symbols for architecture i386:
"_main", referenced from:
start in crt1.10.6.o
(maybe you meant: _SDL_main)
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status
make[2]: *** [src/SDLExample] Error 1
make[1]: *** [src/CMakeFiles/SDLExample.dir/all] Error 2
make: *** [all] Error 2

I get this for both i386 and x86_64. What did I forget?

**EDIT:** these are the file contents:

Mats-MBP:build mats$ cat ../src/main.cpp
/**
* @file main.cpp
*
* A simple example-program to help you out with using SDL for 2D graphics.
*
* @author przemek
*/

#include <iostream>
#include <stdexcept>
#include <SDL.h>
#include <SDL_image.h>

using namespace std;

int main(int argc, char* argv[]) {
try {
// Try to initialize SDL (for video)
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
throw runtime_error("Couldn't init SDL video!");
}
// Create a double-buffered screen surface:
SDL_Surface* screen = SDL_SetVideoMode(800, 600, 24, SDL_DOUBLEBUF/* | SDL_FULLSCREEN*/);
if (!screen) {
throw runtime_error("Couldn't set SDL video mode!");
}

// Use SDL_image library to load an image:
SDL_Surface* image = IMG_Load("image.png");
// SDL_Surface* image = IMG_Load("image.tga");
if (!image) {
throw runtime_error(SDL_GetError());
}

// "Pump" SDL events like keyboard presses and get the keystate:
SDL_PumpEvents();
Uint8* keyState = SDL_GetKeyState(0);

// loop until user presses escape:
while (!keyState[SDLK_ESCAPE]) {
// Display a game background:
SDL_Rect src, dst; // Source and destination rectangles
src.x = 0;
src.y = 0;
src.w = image->w;
src.h = image->h;
dst.x = 100;
dst.y = 50;
dst.w = image->w;
dst.h = image->h;
// Copy the image from 'image' to 'screen' surface
SDL_BlitSurface(image, &src, SDL_GetVideoSurface(), &dst);

// Flip surfaces (remember: double-buffering!) and clear the back buffer:
SDL_Flip(screen);
SDL_FillRect(screen, 0, 0);

// Get new keyboard state:
SDL_PumpEvents();
keyState = SDL_GetKeyState(0);
}

// Free the screen surface & quit SDL
SDL_FreeSurface(screen);
SDL_Quit();
} catch (runtime_error& e) {
cout << e.what() << endl;
SDL_Quit();
}

return 0;
}


RE: libSDL, CMake and Mac OS X Lion - Prosturtan660 - 07-20-2023

As Ramon said, you need to link to SDLmain.lib for many platforms. So have something like this in your CMakeLists.txt file.

link_libraries (
${SDL_LIBRARY}
${SDLIMAGE_LIBRARY} # if using SDL_image, obviously
SDLmain # Sadly not included in SDL_LIBRARY variable
)

Here is a simple page for more information:

[To see links please register here]




RE: libSDL, CMake and Mac OS X Lion - gnomonology810483 - 07-20-2023

I solved it by removing the .framework and unset my export variables to this framework, and I used the source to ./configure, make, make install. I removed all cmake build files and cmade and made my project again and everything was solved.

(For compiling SDL on OS X Lion you need to `./configure --disable-assembly`)