未定义的引用和collect2:错误:ld返回1

时间:2015-06-24 13:02:33

标签: c++

我不明白为什么我有这个未定义的引用错误。函数和file.cpp和file.h的所有这些定义都已更正,并且位于正确的目录路径中。我用这种方式编译:

c++ -std=c++11 testpad.cpp RPCgen_i2cprg/ad74.cpp RPCgen_i2cprg/Cma.cpp RPCgen_i2cprg/Cmapad.cpp RPCgen_i2cprg/fpad.cpp RPCgen_i2cprg/i2cConfDict.cpp RPCgen_i2cprg/i2cdev.cpp RPCgen_i2cprg/i2creg.cpp RPCgen_i2cprg/i2cRegList.cpp RPCgen_i2cprg/lm75.cpp RPCgen_i2cprg/pad.cpp RPCgen_i2cprg/PadBoard.cpp RPCgen_i2cprg/PadConfigurator.cpp RPCgen_i2cprg/padDefine.cpp RPCgen_i2cprg/PadDev.cpp RPCgen_i2cprg/PadDeviceMap.cpp RPCgen_i2cprg/PadMeasures.cpp RPCgen_i2cprg/PadPowerSwitch.cpp RPCgen_i2cprg/pcf8575.cpp RPCgen_i2cprg/prode.cpp RPCgen_i2cprg/SectorConfigurator.cpp RPCgen_i2cprg/ttcrx.cpp RPCi2ccan/CanChanFactory.cpp RPCi2ccan/i2cCanNode.cpp

并且使用g ++但没有。这是我编译的输出错误:

/tmp/usertest/ccQQ70by.o: In function `CanChanFactory::getChannel(int, unsigned short, int)':
CanChanFactory.cpp:(.text+0x151): undefined reference to `CanInterface::newCanInterface(int, int, int, bool)'
/tmp/usertest/ccSmDSn9.o: In function `i2cCanNode::initChannel()':
i2cCanNode.cpp:(.text+0xa9): undefined reference to `CanNodeFactory::instance()'
i2cCanNode.cpp:(.text+0xc6): undefined reference to `CanNodeFactory::getCanNode(int)'
/tmp/usertest/ccSmDSn9.o: In function `i2cCanNode::getELMBFirmwareVersion(unsigned char*)':
i2cCanNode.cpp:(.text+0x161): undefined reference to `CanNode::setNodeId(int)'
i2cCanNode.cpp:(.text+0x178): undefined reference to `getFirmwareVersion(CanNode*, unsigned char*)'
/tmp/usertest/ccSmDSn9.o: In function `i2cCanNode::getELMBHardwareVersion(unsigned char*)':
i2cCanNode.cpp:(.text+0x1a7): undefined reference to `CanNode::setNodeId(int)'
i2cCanNode.cpp:(.text+0x1be): undefined reference to `getHardwareVersion(CanNode*, unsigned char*)'
/tmp/usertest/ccSmDSn9.o: In function `i2cCanNode::NMTResetNode()':
i2cCanNode.cpp:(.text+0x26a): undefined reference to `CanNode::setNodeId(int)'
i2cCanNode.cpp:(.text+0x27f): undefined reference to `CanNode::nmt(int)'
/tmp/usertest/ccSmDSn9.o: In function `i2cCanNode::fast_init(int, int&)':
i2cCanNode.cpp:(.text+0x33a): undefined reference to `CanNode::setNodeId(int)'
i2cCanNode.cpp:(.text+0x361): undefined reference to `COP_WriteSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
i2cCanNode.cpp:(.text+0x3c3): undefined reference to `COP_ReadSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
i2cCanNode.cpp:(.text+0x476): undefined reference to `COP_ReadSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
/tmp/usertest/ccSmDSn9.o: In function `i2cCanNode::read_error(unsigned char*)':
i2cCanNode.cpp:(.text+0x579): undefined reference to `CanNode::setNodeId(int)'
i2cCanNode.cpp:(.text+0x5a9): undefined reference to `read_init_error(CanNode*, int, int, unsigned char*)'
/tmp/usertest/ccSmDSn9.o: In function `i2cCanNode::check_locks(int)':
i2cCanNode.cpp:(.text+0x5e4): undefined reference to `read_check_locks(CanNode*, int)'
/tmp/usertest/ccSmDSn9.o: In function `i2cCanNode::read_i2c(int, unsigned char, unsigned char, unsigned char*)':
i2cCanNode.cpp:(.text+0x77e): undefined reference to `CanNode::setNodeId(int)'
i2cCanNode.cpp:(.text+0x7a4): undefined reference to `COP_WriteSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
i2cCanNode.cpp:(.text+0x805): undefined reference to `COP_WriteSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
i2cCanNode.cpp:(.text+0x884): undefined reference to `COP_ReadSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
i2cCanNode.cpp:(.text+0x8ea): undefined reference to `COP_ReadSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
/tmp/usertest/ccSmDSn9.o: In function `i2cCanNode::read_i2c_nomsg(int, unsigned char, unsigned char, unsigned char*)':
i2cCanNode.cpp:(.text+0xa0c): undefined reference to `CanNode::setNodeId(int)'
i2cCanNode.cpp:(.text+0xa32): undefined reference to `COP_WriteSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
i2cCanNode.cpp:(.text+0xa77): undefined reference to `COP_WriteSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
i2cCanNode.cpp:(.text+0xada): undefined reference to `COP_ReadSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
i2cCanNode.cpp:(.text+0xb2b): undefined reference to `COP_ReadSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
/tmp/usertest/ccSmDSn9.o: In function `i2cCanNode::write_i2c(int, unsigned char, unsigned char, unsigned char*)':
i2cCanNode.cpp:(.text+0xbd4): undefined reference to `CanNode::setNodeId(int)'
i2cCanNode.cpp:(.text+0xc20): undefined reference to `COP_WriteSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
i2cCanNode.cpp:(.text+0xc81): undefined reference to `COP_WriteSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
i2cCanNode.cpp:(.text+0xcf0): undefined reference to `COP_WriteSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
i2cCanNode.cpp:(.text+0xd61): undefined reference to `COP_ReadSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
/tmp/usertest/ccSmDSn9.o: In function `i2cCanNode::write_i2c_nomsg(int, unsigned char, unsigned char, unsigned char*)':
i2cCanNode.cpp:(.text+0xe2e): undefined reference to `CanNode::setNodeId(int)'
i2cCanNode.cpp:(.text+0xe81): undefined reference to `COP_WriteSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
i2cCanNode.cpp:(.text+0xec6): undefined reference to `COP_WriteSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
i2cCanNode.cpp:(.text+0xf19): undefined reference to `COP_WriteSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
i2cCanNode.cpp:(.text+0xf72): undefined reference to `COP_ReadSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
/tmp/usertest/ccSmDSn9.o: In function `i2cCanNode::write_i2c_suba(int, unsigned char, unsigned char, unsigned char, unsigned char*)':
 i2cCanNode.cpp:(.text+0xfde): undefined reference to `CanNode::setNodeId(int)'
i2cCanNode.cpp:(.text+0x1020): undefined reference to `COP_WriteSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
i2cCanNode.cpp:(.text+0x1081): undefined reference to `COP_WriteSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
i2cCanNode.cpp:(.text+0x10e2): undefined reference to `COP_WriteSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
i2cCanNode.cpp:(.text+0x115b): undefined reference to `COP_WriteSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
i2cCanNode.cpp:(.text+0x11ca): undefined reference to `COP_ReadSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
/tmp/usertest/ccSmDSn9.o: In function `i2cCanNode::read_i2c_suba(int, unsigned char, unsigned char, unsigned char, unsigned char*)':
i2cCanNode.cpp:(.text+0x12d2): undefined reference to `CanNode::setNodeId(int)'
i2cCanNode.cpp:(.text+0x1321): undefined reference to `COP_WriteSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
i2cCanNode.cpp:(.text+0x1382): undefined reference to `COP_WriteSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
i2cCanNode.cpp:(.text+0x13e3): undefined reference to `COP_WriteSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
i2cCanNode.cpp:(.text+0x145b): undefined reference to `COP_ReadSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
i2cCanNode.cpp:(.text+0x14c1): undefined reference to `COP_ReadSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
/tmp/usertest/ccSmDSn9.o: In function `i2cCanNode::cmreset()':
i2cCanNode.cpp:(.text+0x15b5): undefined reference to `CanNode::setNodeId(int)'
i2cCanNode.cpp:(.text+0x15dc): undefined reference to `COP_WriteSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
/tmp/usertest/ccSmDSn9.o: In function `i2cCanNode::xilinx_init()':
i2cCanNode.cpp:(.text+0x1655): undefined reference to `CanNode::setNodeId(int)'
i2cCanNode.cpp:(.text+0x167b): undefined reference to `COP_WriteSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
/tmp/usertest/ccSmDSn9.o: In function `i2cCanNode::polar_init()': 
i2cCanNode.cpp:(.text+0x16ed): undefined reference to `CanNode::setNodeId(int)'
i2cCanNode.cpp:(.text+0x1714): undefined reference to `COP_WriteSDO(CanNode*, int, int, unsigned char*, unsigned char*)'
collect2: error: ld returned 1 exit status

有什么问题?谢谢。

2 个答案:

答案 0 :(得分:0)

它不是编译器错误,而是链接器错误。它基本上表明在源代码中CanInterface::newCanInterface(int, int, int, bool)被视为外部符号。并且链接器在任何地方都找不到它因此未定义的符号错误。

你可能错过了一个图书馆。您可以在build命令中使用-L -l:指定库。

请注意-L或-l之后没有空格:

希望这能解决你的问题

答案 1 :(得分:0)

您的编译命令错误

c ++ -std = c ++ 11 testpad.cpp RPCgen_i2cprg / ad74.cpp RPCgen_i2cprg / Cma.cpp RPCgen_i2cprg / Cmapad.cpp RPCgen_i2cprg / fpad.cpp

应该是

g ++ -std = c ++ 11 testpad.cpp RPCgen_i2cprg / ad74.cpp RPCgen_i2cprg / Cma.cpp RPCgen_i2cprg / Cmapad.cpp RPCgen_i2cprg / fpad.cpp

你已经说过了问题

  

使用g ++但没有

相关问题