Dolinkowanie Sfmla Linux

0

Uznałem że chociaż temat jest związany z Qt to i tak jest newbie . Mianowicie tworzę w Qt Creator w QT program który za pomocą SFML-a odtwarza OGG i Wavy .
Wszystko jest niby ok ale zwraca mi "Undefined reference to Sf:: ... " Czyli niezlinkowana biblioteka w pliku .pro dopisałem : LIBS += -lsfml-system -lsfml-window -lsfml-graphics -lsfml-audio ale nadal nic . Ma ktoś pomysł na rozwiązanie problemu ?

0

jaki kompilator i system?

0

Linux Xubuntu , GNU

0

a wersja sfml'a? Zwróciłeś przy tym uwagę czy pobrałeś dla C czy dla C++?

0

1.6 Dla C++ , a co spróbować tych dla C ?

0

nie programuję przy użyciu SFML ale dokumentacja mówi:

When linking to multiple SFML libraries, make sure you link them in the right order, as it's important for gcc. The rule is the following : if library XXX depends on (uses) library YYY, put XXX first and then YYY. An exemple with SFML : sfml-graphics depends on sfml-window, and sfml-window depends on sfml-system. The link command line would be as follows :
g++ -o ... -lsfml-graphics -lsfml-window -lsfml-system

źródło
może kolejność jest przyczyną błędu.

0

Niestety nie . Ten sam efekt .

0

możesz wrzucić przykładowy kod, który ci się nie kompiluje? Próbowałeś skompilować program "na czysto" bez Qt (przykładowo example ze strony biblioteki)?

edit:

If you are using the Graphics or Audio packages, you must first install the external libraries needed by each package.
Graphics requires freetype.
Audio requires libsndfile and openal.
These libraries can be installed using the standard package manager of your system, or downloaded from their official website.
If you have troubles using the default OpenAL library (which is often the case as the Linux implementation is not stable), you can replace it with the OpenAL-Soft implementation. The binaries are fully compatible, so you won't need to recompile SFML nor your programs using it.

to też czytałeś? W ogóle przeglądnąłeś dokumentację (przynajmniej link, który wyżej zamieściłem)? Nic nie skutkuje?

0

Ok . Dopiero w powijakach jest .
Main.cpp


#include <QtGui>
#include <iostream>
#include "okno.hpp"
#include "QtCore"
#include <SFML/Audio.hpp>


int main( int argc, char * argv[] )
{
    QApplication program( argc, argv );
    QTextCodec::setCodecForCStrings( QTextCodec::codecForName( "UTF-8" ) );


    oknogl okno;
    okno.show();



    return program.exec();
}


 

oknogl.hpp


#ifndef okno_HPP
#define okno_HPP

#include <QtGui>
#include <QApplication>
#include <SFML/Audio.hpp>


using namespace std;


extern sf::Music muzyka ;

class oknogl : public QMainWindow
{
public:
    oknogl();
QHBoxLayout * wiersz ;
const QString * nazwa ;
void otwieranie() ;


public slots:
void zapoczatkuj();

signals:
void otworz();


private:
    QPushButton * przycisk;
    QLabel * etykieta;
    QSlider * stan ;
    QPushButton * start ;
    QPushButton * otzam ;
    QMessageBox * blad ;

};

#endif // oknogl_HPP

 

oknogl.cpp

 #include "okno.hpp"
#include "QtGui"
#include <SFML/Audio.hpp>
#include "QtCore"



oknogl::oknogl( )
{

    setWindowTitle( "Odtwarzacz" );
    setGeometry(100 , 100 , 500 , 100 );
    przycisk = new QPushButton( "Wyjście", this );


    start = new QPushButton("Odtwarzaj", this) ;



    otzam = new QPushButton("Otwórz Plik" , this) ;

   // wskaźnik stanu utworu
    stan = new QSlider(Qt::Horizontal , this );


    etykieta = new QLabel("" , this ) ;
//Porządkowanie Tałatajstwa

    wiersz = new QHBoxLayout ;
    wiersz ->addWidget(start);

    wiersz ->addWidget(otzam);
    wiersz->addWidget(stan);
    wiersz->addWidget(przycisk);
setCentralWidget(etykieta);
wiersz->setSpacing(8);
    centralWidget()->setLayout(wiersz);
    connect(otzam ,SIGNAL(clicked()) , this , SLOT() ) ;



}
void oknogl::otwieranie()
{

QString plik = QFileDialog::getOpenFileName(this, tr("Otwórz Plik"), QDesktopServices::storageLocation(QDesktopServices::MusicLocation));

if(plik.isEmpty())
    return ;

if(!plik.isEmpty())
{
QString * a ;
a = &plik ;
const string b = a->toStdString() ;
const char * c = b.c_str() ;

muzyka.OpenFromFile( b ) ;
}



};

Tak poza tym to kod jest jeszcze po paru próbach samodzielnej naprawy błędu więc się nie wystraszcie . Nie ma jeszcze slotu gdyż to są naprawdę a naprawdę powijaki . Jeśli chodzi o dokumentację to trochę przeczytałem , szukałem jeszcze na Anglo i Niemiecko języcznych forach .Te dodatkowe biblioteki też mam , sprawdzałem w terminalu .

1

Ten kod się nie kompiluje.

extern sf::Music muzyka;

i nastepnie

muzyka.OpenFromFile( b ) ;

jest błędne.

Dlaczego nie zrobić "muzyka" polem klasy?
Ewentualnie umieścić w przestrzeni:

namespace {
    sf::Music muzyka ;
};
(...)
::muzyka.OpenFromFile( b ) ;

poza tym kod u mnie się kompiluje. Jeśli poprawienie tego co napisałem nie da pozytywnego efektu to obstawiłbym błędną instalacje biblioteki.

0

Człowieku wiszę ci piwo za to ! Dzięki już myślałem że coś nie tak kompletnie z tą biblioteką , a okazało się że źle sobie dokumentację przetłumaczyłem . Niech ci to Bóg wynagrodzi gościu !

1 użytkowników online, w tym zalogowanych: 0, gości: 1