我过去使用过 libftdi 并使用以下命令进行编译:
gcc -lftdi -o i2csend i2csend.c
一切都很顺利。今天,在 Ubuntu 12.10 上我遇到了很多错误,例如undefined reference toftdi_init'`
我知道 libftdi 被重命名为 libftdi1 所以我尝试了相同的命令-lftdi1并得到了错误:
/usr/bin/ld: 找不到 -lftdi1 collect2: 错误: ld 返回 1 退出状态
谁能解释为什么?
您通常不应直接指定外部包的库名称。
最好使用打包系统的帮助程序,即pkg-config像这样:
$ gcc -o i2csend i2csend.c $(pkg-config --cflags --libs libftdi1)
请注意,这假设包名称libftdi1在pkg-config's 数据库中;我不确定如何以便携方式验证这一点。你可以跑pkg-config --list-all | grep ftdi过去一探究竟。
-l将库部分(选项)保留在命令行末尾通常是一个好主意,上面就是这样做的。将部分分解出来会更干净一些CFLAGS,但这需要重复命令:
$ gcc $(pkg-config --cflags libftdi1) -o i2csend i2csend.c $(pkg-config --libs libftdi1)
在这里,我使用双空格来分隔命令行的逻辑部分以提高清晰度。