对`ftdi_init'的未定义引用

时间:2013-02-14 10:38:37

标签: c ubuntu

我以前使用过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退出状态

任何人都可以解释原因吗?

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)

在这里,我使用了双空格来分隔命令行的逻辑部分,以提高清晰度。