【问题标题】:Undefined references even though library is linking and it contains correct symbols未定义的引用,即使库正在链接并且它包含正确的符号
【发布时间】:2018-06-12 16:10:11
【问题描述】:

我正在尝试使用 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

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

【问题讨论】:

    标签: c++ compilation linker


    【解决方案1】:

    链接器将未解析的外部符号报告为 ptp_usb_sendreq(_PTPParams*, _PTPContainer*) 的事实意味着这些符号以 C++ 方式被破坏(否则,函数参数将不可见)。

    同时,nm 将符号报告为ptp_usb_sendreq,这意味着它没有被损坏。

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

    【讨论】:

    • 这完全正确,我忘记了外部“C”。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    相关资源
    最近更新 更多