C++ 未定义的引用,即使库正在链接并且包含正确的符号

C++ 未定义的引用,即使库正在链接并且包含正确的符号,c++,compilation,linker,C++,Compilation,Linker,我正在尝试使用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

我正在尝试使用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*)'
尽管所有这些符号都在我用-lptp2链接的libptp2库中:

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

<>我很困惑为什么链接器认为符号没有定义…

链接器报告未解决的外部符号为“代码”的事实:PTPUSUbBsEnErqq(ypPTPARAMS *,ypPTPix*)< /C> >意味着这些符号以C++方式被破坏(否则,函数参数将不可见)。 同时,
nm
将符号报告为
ptp_usb_sendreq
,这意味着它没有损坏


最可能的解决方案:检查并确保您的函数签名(可能在头文件中)包装在
extern“C”
说明符中。

这完全正确,我忘记了extern“C”。非常感谢。