一个特定库函数的未定义引用错误

时间:2016-09-13 20:37:15

标签: c++ g++ undefined-reference

我正在编写软件来控制bladeRF无线电卡,但我遇到了一个我无法弄清楚的奇怪的编译器/链接器错误。我的代码使用库libbladeRF中定义的几个函数和数据结构,但由于某种原因,我无法引用一个特定的函数。

但是,如果我使用不正确的参数类型修改调用,g ++将抛出一个错误让我知道它不符合定义,这似乎告诉我链接器实际上能够找到参考。

我错过了什么?

初始错误:

$ g++ bladeRF_test.cpp -o bladeRF_test -lbladeRF
/tmp/ccTWZzdJ.o: In function `enable_xb300()':
bladeRF_test.cpp:(.text+0x36a): undefined reference to `bladerf_xb300_set_amplifier_enable'

代码摘录:

#include <iostream>
#include <string>
#include <libbladeRF.h>
using namespace std;

...

int set_xb300_pa(bool enable) {
    bladerf_xb300_amplifier amp = BLADERF_XB300_AMP_PA;
    if ( bladerf_xb300_set_amplifier_enable(dev, amp, enable) ) {
        // Print error message
        return -1;
    } else {
        // Print success message
        return 0;
    }
}

...

函数参数已从(dev, amp, enable)更改为(&dev, amp, enable)

$ g++ blade_hello.cpp -o blade_hello -lbladeRF
blade_hello.cpp: In function ‘int set_xb300_pa()’:
blade_hello.cpp:62:59: error: cannot convert ‘bladerf**’ to ‘bladerf*’ for argument ‘1’ to ‘int bladerf_xb300_set_amplifier_enable(bladerf*, bladerf_xb300_amplifier, bool)
                                                       ^
In file included from blade_hello.cpp:4:0:
/usr/local/include/libbladeRF.h:2226:15: note: declared here
int CALL_CONV bladerf_xb300_set_amplifier_enable(struct bladerf *dev,
           ^

0 个答案:

没有答案