2014-03-27 36 views
0

我是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

+2

你需要告訴編譯器(以及鏈接器實際上)在modbus庫中鏈接,嘗試在編譯行中添加'-lmodbus'。 –

+0

或多或少與http://stackoverflow.com/questions/10409032/why-im-getting-undefined-reference-to-sqrt-error-even-though-i-include-ma相同的問題,只有你連接對modbus。 – hlovdal

+0

-lmodbus沒有工作。我讀了libmodbus的git關於ldconfig的東西,並確保/etc/ld.so.conf.d具有所有必需的文件鏈接/關聯...但我的機器沒有任何地方有ldconfig(我檢查了$ PATH和/ etc )。我應該朝這個方向看嗎?或者這是不相關的? – nemo

回答

1

試試這個

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

您應該替換/path/to/libmodbus與包括系統中的libmodbus.dylib目錄的實際路徑。

+0

我可以把我的modbus.h文件的路徑,但是因爲即時通訊運行OSX我不認爲os維護.so文件鏈接(糾正我,如果我錯了) – nemo

+0

@nemo後綴應該是'.dylib'。 –

+0

再次感謝您!但在我閱讀你的評論之前,我嘗試過使用它,並將路徑放到.h文件中,我將#include -d放在.c文件中,而不是它工作! – nemo