我过去使用过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)
Run Code Online (Sandbox Code Playgroud)
请注意,这假设包名称libftdi1在pkg-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)
在这里,我使用双倍空格分隔命令行的逻辑部分,以提高清晰度。