在 C 中编译包含 libmodbus 的程序

标签 c linux makefile modbus

我是 C 的新手...我写了一个非常简单的 modbus1.c,其中包括 libmodbus(我下载了它的源代码,解压缩,解压缩,./configure'd,make' 并成功安装)。

当我尝试制作 modbus1.c 时,我得到了这个:

cc -Wall -g     modbus1.c   -o modbus1
Undefined symbols for architecture x86_64:
  "_modbus_close", referenced from:
      _main in modbus1-6cd135.o
  "_modbus_connect", referenced from:
      _main in modbus1-6cd135.o
  "_modbus_free", referenced from:
      _main in modbus1-6cd135.o
  "_modbus_new_tcp_pi", referenced from:
      _main in modbus1-6cd135.o
  "_modbus_read_bits", referenced from:
      _main in modbus1-6cd135.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [modbus1] Error 1

我正在运行 OSX snow leopard 并且之前已经成功地使用 make 来编译小程序(教程级别的程序......)这是我正在尝试编译的 modbus1.c:

#include <stdio.h>
#include <stdlib.h>
#include <modbus.h>

int main(int argc, char *argv[]){
modbus_t *plc_client;

plc_client = modbus_new_tcp_pi("192.168.1.230","502");
if (plc_client == NULL) {
    fprintf(stderr, "Unable to allocate libmodbus context\n");
    return -1;
}
if (modbus_connect(plc_client) == -1) {
    fprintf(stderr, "Connection failed: \n");
    modbus_free(plc_client);
    return -1;
}
else if(modbus_connect(plc_client) == 0) {
    printf("MODBUS CONNECTION SUCCESSFUL\n");
}

uint8_t* catcher = malloc(sizeof(uint8_t));

if(modbus_read_bits(plc_client, 2000, 1, catcher)>0){
    printf("READ SUCCESSFUL");
}
else{
    printf("READ FAILED");
}

free(catcher);
modbus_close(plc_client);
modbus_free(plc_client);

return 0;
}

任何帮助将不胜感激!谢谢!

-妮可

最佳答案

试试这个

cc -Wall -g modbus1.c -o modbus1 -L/path/to/libmodbus -lmodbus

您应该将 /path/to/libmodbus 替换为系统中包含 libmodbus.dylib 的目录的实际路径。

关于在 C 中编译包含 libmodbus 的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22697543/

相关文章:

c - 如何在 C 中将 char 数组 case [0] 和 [1] 连接到 char 指针?

c - 包含另一个 .h 文件只能看到我的结构,但看不到我的函数

PHP:如何检测用户是否是 root/sudo?

python - CentOS 6.6 默认使用 Python 2.6,运行 Swift 命令时会抛出语法错误

c - 使用 Makefile 重新定义问题

linux - Makefile 自动依赖生成

c - Unix 中的套接字通信是如何工作的?有没有特殊的分隔符?什么是 '\r' ?

Java - IO 绑定(bind)线程 - 1 :1 threading model

makefile - 你如何 "echo"源目录中的最后一个 configure/make build --options?

arrays - 缩短计算二维数组中唯一字符数量的函数