我以前使用过libftdi并使用命令编译:
gcc -lftdi -o i2csend i2csend.c
一切都很顺利。
今天,在Ubuntu 12.10上我收到很多错误,例如undefined reference to
ftdi_init'`
我知道libftdi已重命名为libftdi1,因此我尝试使用-lftdi1
执行相同的命令并收到错误:
/ usr / bin / ld:找不到-lftdi1 collect2:错误:ld返回1退出状态
任何人都可以解释原因吗?
答案 0 :(得分:5)
您通常不应直接指定外部包的库名称。
最好使用包装系统的帮助程序,即pkg-config
,如下所示:
$ gcc -o i2csend i2csend.c $(pkg-config --cflags --libs libftdi1)
请注意,这假设包名称在libftdi1
的数据库中为pkg-config
;我不确定如何便携地验证这一点。您可以运行pkg-config --list-all | grep ftdi
来查找。
将库部分(-l
选项)保留在命令行的末尾通常是一个好主意,以上是这样做的。将CFLAGS
部分分解出来有点干净,但这需要重复命令:
$ gcc $(pkg-config --cflags libftdi1) -o i2csend i2csend.c $(pkg-config --libs libftdi1)
在这里,我使用了双空格来分隔命令行的逻辑部分,以提高清晰度。