未定义对ftdi_init的引用

Ori*_*dan 2 c ubuntu

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

gcc -lftdi -o i2csend i2csend.c

一切都很好。今天,在Ubuntu 12.10上,我收到许多错误,例如undefined reference toftdi_init'`。

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

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

谁能解释为什么?

unw*_*ind 5

通常,您不应该直接指定外部软件包的库名。

最好使用打包系统的帮助程序,即pkg-config,例如:

$ gcc -o i2csend i2csend.c $(pkg-config --cflags --libs libftdi1)
Run Code Online (Sandbox Code Playgroud)

请注意,这假设包名称libftdi1pkg-config的数据库中;我不确定如何便携地进行验证。您可以运行pkg-config --list-all | grep ftdi查找。

通常,将库的一部分(-l选项)保留在命令行的最后是一个好主意,如上所述。剔除CFLAGS零件比较干净,但这需要重复以下命令:

$ gcc $(pkg-config --cflags libftdi1)  -o i2csend  i2csend.c  $(pkg-config --libs libftdi1)
Run Code Online (Sandbox Code Playgroud)

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