[c++] link errors

Pagina: 1
Acties:

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 08:47
Ik werkt op ene linux bak met qt, met qt heb ik een projectje gemaakt die enkele externe classes moet includen (sbigimg & sbigcam) deze hebben beide een header + implementatie.

Compilen gaat prima, maar als ik alles wil linken krijg ik een error.

Make gemaakt met qmake, de error:
g++ -o cam .obj/main.o .obj/csbigcam.o .obj/csbigimg.o .obj/mainform.o .obj/qmake_image_collection.o .obj/moc_mainform.o -L/usr/share/qt3/lib -L/usr/X11R6/lib -lqt-mt -lXext -lX11 -lm
.obj/csbigcam.o(.text+0x5f9): In function `CSBIGCam::SBIGUnivDrvCommand(short, void*, void*)':
: undefined reference to `SBIGUnivDrvCommand'
.obj/csbigcam.o(.text+0x622): In function `CSBIGCam::SBIGUnivDrvCommand(short, void*, void*)':
: undefined reference to `SBIGUnivDrvCommand'
.obj/csbigcam.o(.text+0x667): In function `CSBIGCam::OpenDriver()':
: undefined reference to `SBIGUnivDrvCommand'
de functie SBIGUnivDrvCommand staat alsvolgt geinplementeerd:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
PAR_ERROR CSBIGCam::SBIGUnivDrvCommand(short command, void *Params, void *Results)
{
    SetDriverHandleParams sdhp;
    
    // make sure we have a valid handle to the driver
    m_eLastCommand = (PAR_COMMAND)command;
    if ( m_nDrvHandle == INVALID_HANDLE_VALUE )
        m_eLastError = CE_DRIVER_NOT_OPEN;
    else
    {
        // handle is valid so install it in the driver
        sdhp.handle = m_nDrvHandle;
        if ( (m_eLastError = (PAR_ERROR)::SBIGUnivDrvCommand(CC_SET_DRIVER_HANDLE, &sdhp, NULL)) == CE_NO_ERROR )
            // call the desired command
            m_eLastError = (PAR_ERROR)::SBIGUnivDrvCommand(command, Params, Results);
    }
    return m_eLastError;
}

Nu heb ik een vermoeden dat het door de :: komt. Wat doen deze is dit als een this-pointer?
Het vreemde is dat een bestaand QT project die dezelfde code meelinkt + gebruikt dit niet heeft.
Hierom vermoed ik dat de code wel correct is, maar er wat anders aan de hand is.

Wie kan me hierbij helpen? verder gebruik ik Qt en Linux maar ik dacht dat hij in deze catergorie beter af was.

Edit: ik heb een idee.
Het vb programm moet de volgende regel ' gedraaid' hebben: export LD_LIBRARY_PATH=/usr/local/lib

hierin staan wat libs mbt de driver. Waarschijnlijk worden deze ook gebruikt. De vraag is nu dan. Wat mis ik waardoor het vb wel compiled en linkt en mijne niet?

[ Voor 8% gewijzigd door elgringo op 12-12-2005 15:42 ]

if broken it is, fix it you should


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21-04 01:08

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nu heb ik een vermoeden dat het door de :: komt. Wat doen deze is dit als een this-pointer?
Waarom gebruik je dan een :: als je niet weet wat dat betekent? Of is het je eigen code niet? Het is iig geen thispointer nee, wat je doet is de functie SBIGUnivDrvCommand die in de global scope staat aanroepen, die blijkbaar volgens de linker niet bestaat.

[ Voor 31% gewijzigd door .oisyn op 12-12-2005 15:37 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

probeer gewoon eerst een object van die klasse te maken.

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Is er ook nog een sbigudrv.lib?

[edit]
.oisyn schreef op maandag 12 december 2005 @ 15:30:
[...]

Waarom gebruik je dan een :: als je niet weet wat dat betekent? Of is het je eigen code niet?
Linkje

[ Voor 85% gewijzigd door Daos op 12-12-2005 15:42 ]


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 08:47
.oisyn schreef op maandag 12 december 2005 @ 15:30:
[...]

Waarom gebruik je dan een :: als je niet weet wat dat betekent? Of is het je eigen code niet? Het is iig geen thispointer nee, wat je doet is de functie SBIGUnivDrvCommand die in de global scope staat aanroepen, die blijkbaar volgens de linker niet bestaat.
Nee het is mijn code niet, ik mis nml een libray (waar deze dus in staat )
deze staat in /usr/local/lib alleen hoe krijg ik deze in de global scope.

if broken it is, fix it you should


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 08:47
Daos schreef op maandag 12 december 2005 @ 15:40:
Is er ook nog een sbigudrv.lib?

[edit]

[...]

Linkje
nee, wel een libsbigudrv.so in /usr/local/lib

if broken it is, fix it you should


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21-04 01:08

.oisyn

Moderator Devschuur®

Demotivational Speaker

elgringo schreef op maandag 12 december 2005 @ 15:43:
[...]


Nee het is mijn code niet, ik mis nml een libray (waar deze dus in staat )
deze staat in /usr/local/lib alleen hoe krijg ik deze in de global scope.
Door de lib toe te voegen aan de parameters van g++. Je code heeft hier niets mee te maken, aangezien het een link error is, geen compile error.

Ergo, exact hetzelfde probleem als je andere topic: [rml][ c++] link errors met socket++ *[/rml]
elgringo schreef op maandag 12 december 2005 @ 15:44:

nee, wel een libsbigudrv.so in /usr/local/lib
-lsbigudrv dus toevoegen aan de argumenten van g++

[ Voor 29% gewijzigd door .oisyn op 12-12-2005 15:47 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 21-04 12:01

curry684

left part of the evil twins

.oisyn schreef op maandag 12 december 2005 @ 15:45:
[...]


Door de lib toe te voegen aan de parameters van g++. Je code heeft hier niets mee te maken, aangezien het een link error is, geen compile error.
Is natuurlijk geen stalen wet:
C++:
1
2
3
4
5
6
7
void Functie();

int main()
{
Functie();
return 0;
}

Wedden dat die linker error aan de code ligt ;)

Wat je bedoelt te zeggen is dat er geen fout in de code zit bij linker errors, hoogstens omissies.

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21-04 01:08

.oisyn

Moderator Devschuur®

Demotivational Speaker

Flauw, en dat is niet wat hier het geval is, en daar reageerde ik op :)

[ Voor 5% gewijzigd door .oisyn op 12-12-2005 15:51 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 08:47
.oisyn schreef op maandag 12 december 2005 @ 15:45:
[...]


Door de lib toe te voegen aan de parameters van g++. Je code heeft hier niets mee te maken, aangezien het een link error is, geen compile error.

Ergo, exact hetzelfde probleem als je andere topic: [rml][ c++] link errors met socket++ *[/rml]


[...]

-lsbigudrv dus toevoegen aan de argumenten van g++
okay, dat begrijp ik. Maar met qmake make je van een project een makefile. De qmake van mijn vb zet deze optie er dus bij en bij mij niet.

Waarom doet die qmake dat bij het vb wel, en bij mij niet?
Waarschijnlijk is dit dus een instellen / optie / config van Qt oid.

Edit: lama, optie van project, tab C++, dan libs.... (me=stupid)

[ Voor 5% gewijzigd door elgringo op 12-12-2005 15:53 ]

if broken it is, fix it you should

Pagina: 1