LINUX.ORG.RU

Помогите скомпилить динамическую библиотеку, использующую библиотеку SDL1.2

 , , ,


0

1

Приветствую.

Я новичек в C. Пишу свою библиотеку некоторых функций на основе SDL1.2. Хочу скомпилировать все свои наработки в динамическую библиотеку *.so и использовать ее в других проектах. Как правильно оформить опции компиляции, чтобы моя библиотека «знала» о библиотеке SDL.

Пока у меня вот что получилось:

gcc -I/usr/include/lua5.2/ -L/usr/lib/ -c -Wall -fPIC -g main.c -o main.o -lSDL -llua &&
gcc -shared main.o -o mylib.so

Но при поптке зарекуарить свою библиотеку получаю ошибку:

lua5.2: error loading module 'mylib' from file './mylib.so':
	./mylib.so: undefined symbol: SDL_Quit

Я так понимаю, дело здесь в том, что моя библиотека скомпилине без знания о sdl-библиотеке. Подскажите, пожалуйста.


gcc -I/usr/include/lua5.2/ -c -Wall -fPIC -g main.c -o main.o
gcc -shared main.o -o mylib.so -L/usr/lib/ -lSDL -llua
gcc -I/usr/include/lua5.2/ -I/path_to_mylib_include/ my_cool_app.c -o my_cool_app.o
gcc my_cool_app.o -o my_cool_app -L/usr/lib/ -lSDL -llua -L/path_to_mylib/ -lmylib
EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 3)
Ответ на: комментарий от EXL

Что такое «my_cool_app.c»?

Не, у меня есть только main.c с нужным мне sdl-функционалом. Зачем мне разделять код на два файла?

djnoob
() автор топика
Последнее исправление: djnoob (всего исправлений: 1)
Ответ на: комментарий от djnoob

и использовать ее в других проектах

других проектах

my_cool_app - другой проект, линкуемый с твоей либой

t1nman
()
Ответ на: комментарий от djnoob

Очевидно, что это твоё приложение, которое использует эту твою mylib.

Первый блок сборка библиотеки, второй — сборка приложения, которое использует собранную библиотеку.

EXL ★★★★★
()

Тут ты компилируешь свою библиотеку:

gcc -I/usr/include/lua5.2/ -L/usr/lib/ -c -Wall -fPIC -g main.c -o main.o -lSDL -llua &&

А тут ты её линкуешь:

gcc -shared main.o -o mylib.so

На самом деле при компиляции ты указываешь параметры для линковщика, которые игнорируются. А при линковке ты их не указываешь, что и выливается потом при попытке загрузить твою либу в ошибку: загрузчик не находит инфы, где искать символы (SDL_quit).

Можно поправить типа так:

gcc -I/usr/include/lua5.2 -c -Wall -fPIC -g main.c -o main.o &&
gcc -shared main.o -o mylib.so -L/usr/lib -lSDL -llua
Думаю, что /usr/lib можно опустить, т.к. путь выглядит как стандартный, который необязательно указывать явно.

Кстати, библиотеки не имеют функции main(), поэтому чтобы не вводить никого в заблуждение, лучше не называть исходник main.c, а что-то типа mytest.c и libmytest.so, т.к. so-шники принято начинать с lib.

gag ★★★★★
()
Ответ на: комментарий от FIL

я юзаю и баги не прекращаются. причём эпичнее некуда. на android умудряется откатываться в software рендер, полноэкранный режим с изменением разрешения не работает ни в windows ни в linux, по разному отдаёт координаты тачскрина на разных ос. И это оолько то,что на поверхности.

mittorn ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.