C undefined reference to
Якщо прогу запустити з під root =) Вона поверне список моніторів якими можна управляти. Ось мій висновок.
file: dev: / dev / i2c-4 (Unknown monitor (VSC3A2C))
Якщо я правильно розумію процес компіляції. Те компілятор С ++ прекрасно зміг створити об'єктні файли. А проблеми з'являються на наступному кроці. Лінковщік не може знайти функцію ddcci_probe ()
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: In function `MonitorList :: MonitorList () # ':
monitorlist.cpp: 4: undefined reference to `ddcci_probe () # '
collect2: error: ld returned 1 exit status
Ну якщо виходити з вашої логіки то тоді правильніше
sudo g ++ -o MyProgram main.o monitorlist.o -lddccontrol
у компоновщика повинен бути повний доступ до файлів (не зовсім наздоганяю чого.)
але мабуть так треба.
Я згадав у C ++ є особливість роботи з зовнішніми функціями
pListMonitor = ddcci_probe ();
треба перенести в оголошення класу (файл monitorlist.h)
#ifndef MONITORLIST_H
#define MONITORLIST_H
extern "C"
#include
>
class MonitorList
public:
struct monitorlist * pListMonitor;
MonitorList () pListMonitor = ddcci_probe ();>
>;
#endif // MONITORLIST_H
файл (main.cpp)
#include "monitorlist.h"
int main (int argc, char * argv [])
MonitorList List ();
return 0;
>
файл реалізації (monitorlist.cpp)
у мене порожній.
Все прекрасно компілюється.