2

我过去使用过 libftdi 并使用以下命令进行编译:

gcc -lftdi -o i2csend i2csend.c

一切都很顺利。今天,在 Ubuntu 12.10 上我遇到了很多错误,例如undefined reference toftdi_init'`

我知道 libftdi 被重命名为 libftdi1 所以我尝试了相同的命令-lftdi1并得到了错误:

/usr/bin/ld: 找不到 -lftdi1 collect2: 错误: ld 返回 1 退出状态

谁能解释为什么?

4

1 回答 1

5

您通常不应直接指定外部包的库名称。

最好使用打包系统的帮助程序,即pkg-config像这样:

$ gcc -o i2csend i2csend.c $(pkg-config --cflags --libs libftdi1)

请注意,这假设包名称libftdi1pkg-config's 数据库中;我不确定如何以便携方式验证这一点。你可以跑pkg-config --list-all | grep ftdi过去一探究竟。

-l将库部分(选项)保留在命令行末尾通常是一个好主意,上面就是这样做的。将部分分解出来会更干净一些CFLAGS,但这需要重复命令:

$ gcc $(pkg-config --cflags libftdi1)  -o i2csend  i2csend.c  $(pkg-config --libs libftdi1)

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

于 2013-02-14T10:41:53.833 回答