URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4949
[ Назад ]

Исходное сообщение
"gcc и g++ . Не компилятся :-("

Отправлено greenetc , 16-Дек-05 17:20 
программа компилится такими командами

g++ `paragui-config --cflags` -c my.cpp

g++ my.o -o my `paragui-config --libs`

при использвании gcc

gcc -x c++ `paragui-config --cflags` -c my.cpp

компилируется (в исходнике есть строка #include "libmpdlient.h" в папке с компилируемой программой лежат файлы libmpdclient.h и libmpdclient.c ) но при запуске команды

gcc my.o -o my `paragui-config --libs`

выдаёт ошибку чтоен видит функций которые реализованы в libmpdclient.c

вот файл paragui-config

Код:


#!/bin/sh

prefix=/usr
exec_prefix=${prefix}
exec_prefix_set=no

usage="\
Usage: paragui-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--libs] [--cflags]"

if test $# -eq 0; then
      echo "${usage}" 1>&2
      exit 1
fi

while test $# -gt 0; do
  case "$1" in
  -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
  *) optarg= ;;
  esac

  case $1 in
    --prefix=*)
      prefix=$optarg
      if test $exec_prefix_set = no ; then
        exec_prefix=$optarg
      fi
      ;;
    --prefix)
      echo $prefix
      ;;
    --exec-prefix=*)
      exec_prefix=$optarg
      exec_prefix_set=yes
      ;;
    --exec-prefix)
      echo $exec_prefix
      ;;
    --version)
      echo 1.0.4
      ;;
    --cflags)
      if test ${prefix}/include != /usr/include ; then
        includes=-I${prefix}/include
      fi
      echo $includes -I${prefix}/include/paragui  -I/usr/include/freetype2 -I/usr/include/SDL -D_REENTRANT  
      ;;
    --libs)
      if [ "`uname`" = "SunOS" ]; then
        libdirs="-L${exec_prefix}/lib -R${exec_prefix}/lib"
      else
        libdirs="-L${exec_prefix}/lib"
      fi
      echo $libdirs -lparagui -L/usr/lib -Wl,-rpath,/usr/lib -lSDL -lSDL_image -lpthread   -lfreetype  -lstdc++
      ;;
    --static-libs)
      if [ "`uname`" = "SunOS" ]; then
        libdirs="-L${exec_prefix}/lib -R${exec_prefix}/lib"
      else
        libdirs="-L${exec_prefix}/lib"
      fi
      echo $libdirs -lparagui -L/usr/lib -Wl,-rpath,/usr/lib -lSDL -lpthread   -lfreetype  -lstdc++
      ;;
    *)
      echo "${usage}" 1>&2
      exit 1
      ;;
  esac
  shift
done




Содержание

Сообщения в этом обсуждении
"gcc и g++ . Не компилятся :-("
Отправлено vnp , 17-Дек-05 01:57 
>программа компилится такими командами
>
>g++ `paragui-config --cflags` -c my.cpp
>
>g++ my.o -o my `paragui-config --libs`
>
>при использвании gcc
>
>gcc -x c++ `paragui-config --cflags` -c my.cpp
>
>компилируется (в исходнике есть строка #include "libmpdlient.h" в папке с компилируемой программой
>лежат файлы libmpdclient.h и libmpdclient.c ) но при запуске команды
>
>gcc my.o -o my `paragui-config --libs`
>
>выдаёт ошибку чтоен видит функций которые реализованы в libmpdclient.c

Вы пытаетесь собрать my.o с библиотеками

>      echo $libdirs -lparagui -L/usr/lib -Wl,-rpath,/usr/lib -lSDL -lSDL_image -lpthread   -lfreetype  -lstdc++

Про функции из libmpdclient.c линкеру ничего не известно. Попробуйте намекнуть ему, что libmpdclient.o тоже хочет поиграть:

gcc my.o libmpdclient.o -o my `paragui-config --libs`

(откуда брать libmpdclient.o, попробуйте догадаться самостоятельно)


"gcc и g++ . Не компилятся :-("
Отправлено greenetc , 17-Дек-05 17:28 
>gcc my.o libmpdclient.o -o my `paragui-config --libs`
>
>(откуда брать libmpdclient.o, попробуйте догадаться самостоятельно)

gcc -c libmpdclient.c    

так ?


"gcc и g++ . Не компилятся :-("
Отправлено greenetc , 19-Дек-05 11:35 
>>программа компилится такими командами
>>
>>g++ `paragui-config --cflags` -c my.cpp
>>
>>g++ my.o -o my `paragui-config --libs`
>>
>>при использвании gcc
>>
>>gcc -x c++ `paragui-config --cflags` -c my.cpp
>>
>>компилируется (в исходнике есть строка #include "libmpdlient.h" в папке с компилируемой программой
>>лежат файлы libmpdclient.h и libmpdclient.c ) но при запуске команды
>>
>>gcc my.o -o my `paragui-config --libs`
>>
>>выдаёт ошибку чтоен видит функций которые реализованы в libmpdclient.c
>
>Вы пытаетесь собрать my.o с библиотеками
>
>>      echo $libdirs -lparagui -L/usr/lib -Wl,-rpath,/usr/lib -lSDL -lSDL_image -lpthread   -lfreetype  -lstdc++
>
>Про функции из libmpdclient.c линкеру ничего не известно. Попробуйте намекнуть ему, что
>libmpdclient.o тоже хочет поиграть:
>
>gcc my.o libmpdclient.o -o my `paragui-config --libs`
>
>(откуда брать libmpdclient.o, попробуйте догадаться самостоятельно)


Всё сработало .Спасибо огромное. Сделал gcc -c libmpdclient.c , получил файл с расширением .о и всё слинковалось ....НО !!!

теперь встала проблема с mysql ...
пишу в проге #include <mysql.h> опять таже проблема .... компилится , но  не линкуется ... пишет что не видит функции работы с mysql (mysql_connect и др) ... тот же вопрос ... что делать? Тут ведь я уже не смогу взять гдето файл mysql.o ...


"gcc и g++ . Не компилятся :-("
Отправлено Cesar , 19-Дек-05 11:56 
>Всё сработало .Спасибо огромное. Сделал gcc -c libmpdclient.c , получил файл с
>расширением .о и всё слинковалось ....НО !!!
>
>теперь встала проблема с mysql ...
>пишу в проге #include <mysql.h> опять таже проблема .... компилится , но  не линкуется ... пишет что не видит функции работы с mysql (mysql_connect и др) ... тот же вопрос ... что делать? Тут ведь я уже не смогу взять гдето файл mysql.o ...


В этом случае стоит подключить разделяемую библиотеку, libmysql.so, если не ошибаюсь.
На этапе линковки добавляем -lmysql и наслаждаемся :). Если же библиотека лежит в нестандартном месте, например /home/cesar/lib/libmysql.so, в чём я сильно сомневаюсь, то спасёт -L/home/cesar/lib


"gcc и g++ . Не компилятся :-("
Отправлено greenetc , 19-Дек-05 15:43 
>>Всё сработало .Спасибо огромное. Сделал gcc -c libmpdclient.c , получил файл с
>>расширением .о и всё слинковалось ....НО !!!
>>
>>теперь встала проблема с mysql ...
>>пишу в проге #include <mysql.h> опять таже проблема .... компилится , но  не линкуется ... пишет что не видит функции работы с mysql (mysql_connect и др) ... тот же вопрос ... что делать? Тут ведь я уже не смогу взять гдето файл mysql.o ...
>
>
>В этом случае стоит подключить разделяемую библиотеку, libmysql.so, если не ошибаюсь.
>На этапе линковки добавляем -lmysql и наслаждаемся :). Если же библиотека лежит
>в нестандартном месте, например /home/cesar/lib/libmysql.so, в чём я сильно сомневаюсь, то
>спасёт -L/home/cesar/lib

я пробывал добавлять -lmysql , модифицировав скрипт
.......
.......
--libs)
      if [ "`uname`" = "SunOS" ]; then
        libdirs="-L${exec_prefix}/lib -R${exec_prefix}/lib"
      else
        libdirs="-L${exec_prefix}/lib"
      fi
      echo $libdirs -lparagui -L/usr/lib -Wl,-rpath,/usr/lib -lSDL -lSDL_image -lpthread -lmysql  -lfreetype  -lstdc++
      ;;

это не помогло , пищет что не найдена mysql .


"gcc и g++ . Не компилятся :-("
Отправлено gyn61 , 19-Дек-05 22:34 
Библиотека называется libmysqlclient.so и подключать её надо через -lmysqlclient


"gcc и g++ . Не компилятся :-("
Отправлено greenetc , 21-Дек-05 16:24 
>>>Всё сработало .Спасибо огромное. Сделал gcc -c libmpdclient.c , получил файл с
>>>расширением .о и всё слинковалось ....НО !!!
>>>
>>>теперь встала проблема с mysql ...
>>>пишу в проге #include <mysql.h> опять таже проблема .... компилится , но  не линкуется ... пишет что не видит функции работы с mysql (mysql_connect и др) ... тот же вопрос ... что делать? Тут ведь я уже не смогу взять гдето файл mysql.o ...
>>
>>
>>В этом случае стоит подключить разделяемую библиотеку, libmysql.so, если не ошибаюсь.
>>На этапе линковки добавляем -lmysql и наслаждаемся :). Если же библиотека лежит
>>в нестандартном месте, например /home/cesar/lib/libmysql.so, в чём я сильно сомневаюсь, то
>>спасёт -L/home/cesar/lib
>
>я пробывал добавлять -lmysql , модифицировав скрипт
>.......
>.......
>--libs)
>      if [ "`uname`" = "SunOS" ];
>then
>        libdirs="-L${exec_prefix}/lib -R${exec_prefix}/lib"
>      else
>        libdirs="-L${exec_prefix}/lib"
>      fi
>      echo $libdirs -lparagui -L/usr/lib -Wl,-rpath,/usr/lib -lSDL
>-lSDL_image -lpthread -lmysql  -lfreetype  -lstdc++
>      ;;
>
>это не помогло , пищет что не найдена mysql .
сделал .
Добавил в строку опций:

-L/usr/lib/mysql -lmysqlclient

спасибо всем