我是C中的一個新手......我寫了一個非常簡單的modbus1.c,其中包含了libmodbus(我的下載源文件,解壓縮文件,untarred文件,./configured文件,make_d併成功安裝)。編譯一個包含libmodbus的程序C
當我試圖讓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雪豹已經成功地使用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;
}
任何幫助將不勝感激!謝謝!
-Niko
你需要告訴編譯器(以及鏈接器實際上)在modbus庫中鏈接,嘗試在編譯行中添加'-lmodbus'。 –
或多或少與http://stackoverflow.com/questions/10409032/why-im-getting-undefined-reference-to-sqrt-error-even-though-i-include-ma相同的問題,只有你連接對modbus。 – hlovdal
-lmodbus沒有工作。我讀了libmodbus的git關於ldconfig的東西,並確保/etc/ld.so.conf.d具有所有必需的文件鏈接/關聯...但我的機器沒有任何地方有ldconfig(我檢查了$ PATH和/ etc )。我應該朝這個方向看嗎?或者這是不相關的? – nemo