尽管为libusb-1.0指定了-l标志,但gcc链接器错误

时间:2016-09-24 02:12:02

标签: c gcc linker linker-errors libusb-1.0

我正在为我的库指定一个-l标志,所以任何人都可以帮助我理解为什么我收到此命令的错误?

$ gcc `pkg-config --libs --cflags libusb-1.0` sourcefile.c
/tmp/cclBFhzY.o: In function `main':
sourcefile.c:(.text+0x57): undefined reference to `libusb_init'

pkg-config --libs --cflags libusb-1.0评估为-I/usr/include/libusb-1.0 -lusb-1.0。)

我已经验证了库中libusb_init存在

$ nm /usr/lib/x86_64-linux-gnu/libusb-1.0.a | grep libusb_init
0000000000001a60 T libusb_init

我甚至尝试使用gcc选项尝试-L命令:

gcc -I/usr/include/libusb-1.0 -L/usr/lib/x86_64-linux-gnu -lusb-1.0 sourcefile.c

我仍然收到链接器错误。你看到我做错了吗?

(我已经阅读了几个关于未定义引用错误的其他线程,但答案都是明显的答案:在gcc命令中指定库。)

奇怪的是,我无法判断gcc是否正在处理我的选项。当我使用-v标志运行它时,有两个显着的行:

LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/5/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/5/../../../:/lib/:/usr/lib/

...其中不包含我使用-L指定的目录。 (但似乎路径中的第一个条目等同于我的目录。)并且:

COLLECT_GCC_OPTIONS='-v' '-I' '/usr/include/libusb-1.0' '-L/usr/lib/x86_64-linux-gnu' '-mtune=generic' '-march=x86-64'

...不包含我的-l选项。 (也许这不是一个有效的问题,因为下一行确实包含-l选项。)有什么想法吗?

运行Ubuntu 16

1 个答案:

答案 0 :(得分:1)

在链接器选项之前移动void convertToBinary(int base10, int result, char *binaryResult){ int binaryVals[8] = {1,2,4,8,16,32,64,128}; if(base10 == 0){ printf("Binary Result %s", binaryResult); } else{ int max = 0; for(int i = 0; i < 8; i++){ if(binaryVals[i] <= base10){ binaryResult[i] = '0'; } else{ max = binaryVals[i-1]; binaryResult[i-1] = '1'; result = base10-max; printf("Result %d", result); break; //convertToBinary(result,0, binaryResult); } } } } int main(void){ char binaryResult[8]; convertToBinary(15,0,binaryResult); }

链接器从左到右移动库和源文件,注意到未解析的符号。当它到达一个库(例如sourcefile.c)时,链接器将通过并解析当时可以找到的任何符号。

您的图书馆未应用于-lusb-1.0

另见:

Why does the order in which libraries are linked sometimes cause errors in GCC?