2016-04-09 192 views
1

我有一個RPI 3模型B,我想編譯一個與設備的SPI交互的小程序。我正在Linux桌面上編寫程序,所以我想交叉編譯程序。
爲此,我已經安裝了交叉編譯從這裏:https://github.com/raspberrypi/tools
我使用witingPi庫,所以我遵循installaion這些指令:http://wiringpi.com/download-and-install/
我寫的程序是從網絡的一個例子(只是爲了確保我可以編譯和運行它):在交叉編譯器上爲RPI鏈接libwiringPi

#include <stdint.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <errno.h> 

#include <wiringPiSPI.h> 

#define CHANNEL 1 

void send3(uint8_t a, uint8_t b, uint8_t c) { 
    uint8_t buf[3]; 

    buf[0] = a; 
    buf[1] = b; 
    buf[2] = c; 
    wiringPiSPIDataRW(CHANNEL, buf, 3); 
} 

int main(int argc, char** argv) { 
    if (wiringPiSPISetup(CHANNEL, 4000000) < 0) { 
    fprintf (stderr, "SPI Setup failed: %s\n", strerror (errno)); 
    exit(errno); 
    } 

    printf("start\n"); 
    send3(0x40, 0x0A, 0x0B); 
    send3(0x41, 0x0A, 0x00); 
    send3(0x40, 0x00, 0xFF); 
    send3(0x40, 0x0C, 0xFF); 
    send3(0x40, 0x13, 0x00); 
    send3(0x40, 0x01, 0x00); 
    send3(0x40, 0x04, 0xFF); 
    printf("done\n"); 
    return 0; 
} 

的問題是,我不能得到與wiringPi庫工作聯動部分: 編譯部分工作得很好: ./arm-linux-gnueabihf-gcc -c /home/guy/main.c -o /home/guy/main.o -I /home/guy/toolchain/wiringPi/wiringPi
/home/guy/toolchain/wiringPi/wiringPi是wiringPi圖書館和標題的路徑。我確信,自編譯成功以來,這一切都運行良好(意味着可以訪問wiringPi頭文件)。

接下來,我曾嘗試以下命令將代碼與wirinPi庫鏈接,並創建可執行文件: ./arm-linux-gnueabihf-gcc -L/home/guy/toolchain/wiringPi/wiringPi -o "AngleCalculator" /home/guy/main.o -lwiringPi

如果不成功,我得到了以下信息:/home/guy/toolchain/wiringPi/wiringPi/libwiringPi.so: file not recognized: File format not recognized

一些帖子使用-static建議國旗在聯動但它仍然沒有工作,我得到以下消息:/home/guy/toolchain/rpi2/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lwiringPi。我想這是因爲沒有靜態版本的wiringPi。

在RPI設備上運行相同的鏈接命令本身可以成功運行。 我不知道是什麼原因導致了這個錯誤。我應該使用另一個版本的gcc交叉編譯器嗎?也許我應該使用另一個版本的wiringPi?

感謝

回答

1

經過進一步調查,我發現,這是我的壞:
在下載wiringPi圖書館,我有我的桌面上的工具鏈建立它。這創建了一個這樣的文件,當試圖鏈接它與pi的工具鏈導致一個錯誤。
我已經從pi複製到我的桌面,一切工作正常。