首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gcc链接器错误,尽管为libusb-1.0指定了-l标志

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

Stack Overflow用户
提问于 2016-09-24 02:12:02
回答 1查看 1.1K关注 0票数 1

我正在为我的库指定一个-l标志,所以有人能帮我理解为什么我收到这个命令的错误吗?

代码语言:javascript
复制
$ 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 存在于库中的:

代码语言:javascript
复制
$ nm /usr/lib/x86_64-linux-gnu/libusb-1.0.a | grep libusb_init
0000000000001a60 T libusb_init

此外,我甚至使用一个gcc选项尝试了我的-L命令:

代码语言:javascript
复制
gcc -I/usr/include/libusb-1.0 -L/usr/lib/x86_64-linux-gnu -lusb-1.0 sourcefile.c

但我还是知道链接器出错了。你看到我做错什么了吗?

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

奇怪的是,我不知道gcc是否在处理我的选择。当我使用-v标志运行它时,突出的两行是:

代码语言:javascript
复制
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/

...which不包括我用-L指定的目录。(但路径中的第一个条目似乎相当于我的dir。)和:

代码语言:javascript
复制
COLLECT_GCC_OPTIONS='-v' '-I' '/usr/include/libusb-1.0' '-L/usr/lib/x86_64-linux-gnu' '-mtune=generic' '-march=x86-64'

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

运行Ubuntu 16

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-24 02:28:06

在链接器选项之前移动sourcefile.c

链接器从左到右遍历库和源文件,同时注意未解决的符号。当它到达一个库(如-lusb-1.0)时,链接器会遍历并解析它在此时可以找到的任何符号。

您的库没有应用于sourcefile.c

另请参阅:

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39671844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档