Неопределенные ссылки, даже если библиотека содержит ссылки и содержит правильные символы - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь скомпилировать мой исполняемый файл с этой строкой из моего Makefile:

g++-8.1.0 -Wall -Wextra -pthread -std=c++17 -ggdb3 -I/usr/local/include ./src/barometer.o ./src/serial.o ./src/ptpcontroller.o ./src/stream.o ./src/helper.o ./src/thetav.o ./src/gps.o ./src/flightcontroller.o ./src/gui.o ./src/maneuvers.o ./src/main.o ./src/fcinterface.o ./libs/NemaTode/src/NumberConversion.o ./libs/NemaTode/src/NMEAParser.o ./libs/NemaTode/src/GPSFix.o ./libs/NemaTode/src/NMEACommand.o ./libs/NemaTode/src/GPSService.o ./libs/ptpcam/ptpcam.o -o halo -L/usr/local/lib -lwiringPi -lrt -lpigpio -lncurses -lptp2 -lusb

И я получаю множество неопределенных ошибок ссылок, таких как:

./libs/ptpcam/ptpcam.o: In function `init_ptp_usb(_PTPParams*, _PTP_USB*, usb_device*)':
/home/pi/ProjectHaloDrone/RPiCM3/libs/ptpcam/ptpcam.cpp:322: undefined reference to `ptp_usb_sendreq(_PTPParams*, _PTPContainer*)'

Даже если все этисимволы находятся в библиотеке libptp2, с которой я связываюсь с -lptp2:

pi@raspberrypi:~/ProjectHaloDrone/RPiCM3 $ nm -g /usr/local/lib/libptp2.so | grep ptp_usb_sendreq
00002d3c T ptp_usb_sendreq

Я очень озадачен, почему компоновщик считает, что символы не определены ...

1 Ответ

0 голосов
/ 12 июня 2018

Тот факт, что компоновщик сообщает о неразрешенных внешних символах как ptp_usb_sendreq(_PTPParams*, _PTPContainer*), означает, что эти символы искажены способом C ++ (в противном случае аргументы функции не будут видны).

В то же время nm сообщаетсимвол как ptp_usb_sendreq, что означает, что он не искажен.

Наиболее вероятное решение: проверьте и убедитесь, что ваша сигнатура функции (вероятно, в заголовочном файле) заключена в спецификатор extern "C".

...