C referință nedefinite la

Dacă rulați un program dintr-o rădăcină =) Se va returna o listă de monitoare care pot fi controlate. Aici este concluzia mea.
fișier: dev: / dev / I2C-4 (Monitor necunoscut (VSC3A2C))

Dacă am înțeles procesul de compilare. compilator C ++ a fost capabil de a crea perfect fișierele obiect. Dar problemele apar în etapa următoare. Linker-ul nu poate găsi ddcci_probe funcția ()
ls * .o
main.o monitorlist.o

nm -D /usr/lib/x86_64-linux-gnu/libddccontrol.so.0 | grep ddcci_probe
0000000000004680 T ddcci_probe
00000000000044e0 T ddcci_probe_device

g ++ o- myprogram main.o monitorlist.o -lddccontrol
monitorlist.o: În funcție de `MonitorList :: MonitorList () #„:
monitorlist.cpp: 4: referință nedefinit la `ddcci_probe () # '
collect2: eroare: ld returnat 1 iesire de stare

Ei bine, judecând după logica apoi corectă a
sudo g ++ o- myprogram main.o monitorlist.o -lddccontrol
în linker-ul trebuie să aibă acces complet la fișiere (nu destul de captură ce.)
dar poate ar trebui să fie.

Mi-am amintit în C ++ are o caracteristică cu funcții externe
pListMonitor = ddcci_probe ();
ar trebui să fie mutat la anunțarea de clasă (fișier monitorlist.h)
#ifndef MONITORLIST_H
#define MONITORLIST_H
extern "C"
#include
>
clasa MonitorList
publice:

struct monitorlist * pListMonitor;
MonitorList () pListMonitor = ddcci_probe ();>
>;
# endif // MONITORLIST_H

fișier (main.cpp)
#include "monitorlist.h"

int main (int argc, char * argv [])

MonitorList List ();
return 0;
>
fișier de punere în aplicare (monitorlist.cpp)
Am un gol.
Toate frumos compilat.

articole similare