我正在尝试使用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
我很困惑为什么链接器认为符号没有定义......
答案 0 :(得分:0)
链接器将未解析的外部符号报告为ptp_usb_sendreq(_PTPParams*, _PTPContainer*)
这一事实意味着这些符号以C ++方式被破坏(否则,函数参数将不可见)。
与此同时,nm
会将符号报告为ptp_usb_sendreq
,这意味着它不会受损。
最有可能的解决方案:检查并确保您的函数签名(可能在头文件中)包含在extern "C"
说明符中。