nixp.ru v3.0

25 мая 2017,
четверг,
13:36:51 MSK

DevOps с компанией «Флант»
andrew_programmer написал 17 мая 2006 года в 22:43 (395 просмотров) Ведет себя неопределенно; открыл 6 тем в форуме, оставил 13 комментариев на сайте.

У меня при линковке библиотеки SDL(файл libSDL.a)к программе не обнаруживаются функции использующие Xwindows(библиотека X11) и линковщик выдает сообщения об ошибках.

Так у меня дело обстоит,как с собранной из исходников библиотекой SDL,так и с той которая была установлена вовремя инсталяции Линукса(дериктория /usr/lib/).

Естественно,что библиотека X11 у меня установлена и все необходимые файлы там есть.

Я пробовал при линковке добавлять библиотеку libXxf68vm.a и некоторые другие,но результат тоже.

Читал в интернете,как другие устанавливают,так у них таких проблем небыло.

Есть кто-нибудь из пользователей RH,кто смог успешно слинковать к программе библиотеку SDL ?

andrew_programmer

Десять минут назад мне пришла идея.Я решил в исходниках SDL в дериктории

…/video/X11/ во всех файлах прописать пути вручную.Собрал библиотеку заново.Начал линковать SDL к программе и(Ура!) нет ошибок линковки.Скомпилировал примеры и они наконец заработали !!!

p.s.

Не ожидал я что мне в голову придет такая идея.А уж то,что она сработает — темболее неожидал.Извините,что ложная тревога получилась.

rgo

брр. упорство это хорошо ;)

У меня при линковке библиотеки SDL(файл libSDL.a)

почему libSDL.a? зачем тебе .a? статической компиляции захотелось? нафига козе баян? линковать надо с libSDL.so посредством опции линкера -lSDL, уже обсасывали кажись.

Читал в интернете,как другие устанавливают,так у них таких проблем небыло.

вот смотри, лезем в тутор на libsdl.org находим следующий сорец:

include "SDL/SDL.h"
int main( int argc, char* args[] )
{
 //Start SDL
 SDL_Init( SDL_INIT_EVERYTHING );
 //Quit SDL
 SDL_Quit();
 return 0;
}

и строчку для компиляции этого сорца:

g++ -o myprogram mysource.cpp -lSDL

что не работает? у меня программки с sdl компилировались в rh7.3, rh9.0, slack10, gentoo<чего-то-там-до-сих-пор-не-запомню>. И компилировались именно таким образом.

8084

Аффтар пиши ище……..смеялсо……

andrew_programmer

Вы меня точто за тупого принимаете.

Линкуется libSDL.a

НО!В командной строке набирать надо все по другому!

Вот так(с примером моих полных директорий):

gcc -o /home/andrew/MyPrograms/main /home/andrew/MyPrograms/main.c -I/usr/include/SDL -L/home/andrew/src/.libs -lSDL

А если еще math.h использовать,то к приведенной выше строке нужно добавлять -L/usr/lib/ -lm

Хоть я и начинающий пользователь Линукса,но я далеко не тупой как вы обомне думаете.

А Линукс пришлось использовать потому,что,к сожалению,не все люди понимают Ассемблер,а мне нужно написать научную программу(я физик),логику работы которой смогли бы проверить другие.

А вообще-то я люблю Ассемблер и пишу на нем под ассемблерную операционную систему КОЛИБРИ(под неё на ассемблере писать намного проще,чем под UNIX системы).

Линукс хорошая система,но Си мне не по душе.

Genie

насколько мне подсказывает моя память, для физиков, особенно в научной среде, более привычен Fortran. а их есть ;) под линух.

так при чём тогда тут С?

ну, я понимаю.. что хочется использовать имеющиеся инструменты, которые есть в системе. ну так и тогда использовать ещё и те, которые приняты в среде. раз уж научный работник…

$ cd /home/andrew/MyPrograms
$ gcc -I/usr/include/SDL -lSDL -lm -o main main.c

остальные параметры в правильно установленном gcc указывать не нужно…

да и -I/usr/include/SDL — избыточно. потому как

#include 


должно быть достаточно ;)

НО! заметь разницу с:

#include «SDL/SDL.h»
andrew_programmer

Фортран изучать надо,а Си я знаю.

У нас на кафедре есть несколько чловек,которые свои научные программы пишут под Linux и на Си.

Genie,то что вы сказали про команды GCC и разницу между «…» и <…> я знаю.

myst

> Вы меня точто за тупого принимаете.

> Линкуется libSDL.a

> НО!В командной строке набирать надо все по другому!

* myst ржот пацтулам

rgo
andrew_programmer
Вы меня точто за тупого принимаете.

как ты догадался? ;) обижаться не стоит, но столько времени пытаться установить SDL… это сильно. Всё, конечно, бывает, но не для такой фенечки как sdl.

andrew_programmer
Линкуется libSDL.a

НО!В командной строке набирать надо все по другому!

Вот так(с примером моих полных директорий):

gcc -o /home/andrew/MyPrograms/main /home/andrew/MyPrograms/main.c -I/usr/include/SDL -L/home/andrew/src/.libs -lSDL

А если еще math.h использовать,то к приведенной выше строке нужно добавлять -L/usr/lib/ -lm

откуда берётся выделенная строчка? Ты что не установил SDL, а только скомпилировал? Так почему же, тогда, -I/usr/include/SDL?

Сделай вот что:

$ cd ~/src
$ tar zxf SDL-.tar.gz
$ cd SDL-
$ ./configure --prefix=/usr --enable-shared
$ make
$ make install
$ cd .. && rm -rf SDL-

Теперь повторить это для SDL_gfx, SDL_image, SDL_ttf, SDL_sound, SDL_mixer. последовательность, как мне думается, может быть произвольной, если нет, то тебе об это скажут, и, поскольку ты не тупой, то я думаю подстроиться под эти обстоятельства сможешь. ;)

после этого все libSDL*.so будут лежать в /usr/lib, все хедеры в /usr/include/SDL*.

andrew_programmer
А если еще math.h использовать,то к приведенной выше строке нужно добавлять -L/usr/lib/ -lm

вот это почему я не знаю… ты каким образом устанавливал gcc и binutils?

но раз так, то помимо -I/usr/include/SDL, тебе придётся ещё говорить -L/usr/lib.

andrew_programmer
А Линукс пришлось использовать потому,что,к сожалению,не все люди понимают Ассемблер,а мне нужно написать научную программу(я физик),логику работы которой смогли бы проверить другие.

А вообще-то я люблю Ассемблер и пишу на нем под ассемблерную операционную систему КОЛИБРИ(под неё на ассемблере писать намного проще,чем под UNIX системы).

Линукс хорошая система,но Си мне не по душе.

а мне по душе и линух, и C и асм, и (к чему бы это) проблем у меня с ними нету. Я пишу на C и asm’е для линуха, доса (точнее не-доса, ибо на дос я забил сразу же после знакомства с asm’ом) не вылезая из линухов, только периодически меняя дистры, ибо никак не могу найти идеала.

andrew_programmer

rgo,а вот с выделенной строчкой я дествительно,глупость написал.А -I/usr/include/SDL/ я в действительности не пишу(библиотека у меня установлена).

Я не занимался каждый день установкой библиотеки SDL.Я брался за её установку три раза(последний удачный).Но периоды времени между этими установками — несколько дней.Вот и кажется,что я долго ей занимался.

Вобще-то смеятся над людьми,которые учаться- это нехорошо.Если надовсеми смеятся,то идея этого сайта- помогать людям лучше разобраться в Unix системах- теряет смысл.Я вот тоже имею мощные знания и опыт в различных областях,но над другими не смеюсь.

p.s.

Учиться,учиться,учиться.

myst

Идея этого сайта несколько другая, как мне кажется…

Longobard

Да ладно тебе, myst, нормальные вопросы человек задает. Ну бывает, кто-то наступает на стандартные грабли, а кто-то очень долго разбирается с тем, что другие поняли за две минуты. Так что будь терпимее :) Уж лучше на такие вопросы отвечать, чем на всякие «у меня пхпбб не работает что делать» (см. соседний топик)

myst

Не ну, я-то ничего против не имею, но можно же (в конце концов!) прочитать доку по дистрибу и поставить пакеты нужные? Или слово «читать» тов. Andrew не знакомо?

andrew_programmer

myst,еслибы я не читал документацию,то тогда бы не сдвинулся с места.Я бывал на сайте SDL,читал документацию там,скачивал оттуда библиотеку SDL и пакет SDL-devel(ввиде rpm пакетов).Устанавливал соответствующие пакеты.Но в линуксе есть много нового- непохожего на другие операционные системы.Иногда оказывается,что для реализации задумки нужно знать вещи,аналогов которых в других операционных системах не существует.Соответственно трудно понять,что необходимо искать и что делается неправильно.

Уж кто-кто,а физики тратят уйму времени на чтение книг,документации,на решение задач(как теоретических,так и рассчетных).Еслибы у меня было свободное время,то сам бы изучил,то что нужно.А раз уж его нет,то обратился к людям.В надежде,что люди меня поймут и ответят по нармальному на мои вопросы.А не будут смеятся надомной.Многие люди выходят в интернет с целью чему-то научиться или обменяться опытом.А если не хочется делиться опытом,то лучше вообще ничего не писать(так делают дабы не обидеть человека).

myst

Andrew, отвечаю нормально. Берёшь доку НЕ ПО SDL, А ПО ДИСТРУ, КОТОРЫМ ПОЛЬЗУЕШЬСЯ, изучаешь как работает его пакетный менеджер и, пользуясь пакетным менеджером, ставишь УЖЕ СКОМПИЛИРОВАННЫЕ пакеты SDL, какие тебе нужно.

andrew_programmer

Вот это другое дело.

Спасибо за хороший совет!

Обязательно почитаю.

myst

Я тебе это уже третий раз говорю… :))