2

腕のターゲットに小さなアプリケーションを作成しようとしています。私はすでにLinuxのEclipseでツールチェーンを設定しています。今、私はライブラリを構築しようとしています。

これが私のライブラリヘッダーファイルled.hです:

#ifndef LED_H_
#define LED_H_

extern char ledon(char lednum);
extern char ledoff(char lednum);

#endif /* LED_H_ */

そして私のcファイルled.c:

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <led.h>
int fd = 0;

char ledon(char lednum)
{
    switch(lednum)
    {
    case 0 :fd = open("/sys/class/leds/beaglebone::usr0/brightness", O_WRONLY);
               break;
    case 1 :fd = open("/sys/class/leds/beaglebone::usr1/brightness", O_WRONLY);
                break;
    case 2 :fd = open("/sys/class/leds/beaglebone::usr2/brightness", O_WRONLY);
                break;
    case 3 :fd = open("/sys/class/leds/beaglebone::usr3/brightness", O_WRONLY);
                break;

    }
    if (fd>0)
    {
        write(fd,"1",sizeof(char));
        close(fd);
        return 1;
     }
    else
    {
        printf("Message form library function\n Error reading the LED %d",lednum);
        return 0;
    }


}

char ledoff(char lednum)
{
    switch(lednum)
    {
    case 0 :fd = open("/sys/class/leds/beaglebone::usr0/brightness", O_WRONLY);
               break;
    case 1 :fd = open("/sys/class/leds/beaglebone::usr1/brightness", O_WRONLY);
                break;
    case 2 :fd = open("/sys/class/leds/beaglebone::usr2/brightness", O_WRONLY);
                break;
    case 3 :fd = open("/sys/class/leds/beaglebone::usr3/brightness", O_WRONLY);
                break;

    }
    if (fd>0)
    {
        write(fd,"0",sizeof(char));
        close(fd);
        return 1;
     }
    else
    {
        printf("Message form library function\n Error reading the LED %d",lednum);
        return 0;
    }


}

上記をコンパイルすると、led.hとlibled.soが取得されます。

次に、別のプロジェクトでテストcファイルledtest.cを作成します。

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <led.h>

int main(void) {

    while(1)
    {
        ledon(2);
        sleep(1);
        ledoff(2);
        sleep(1);
    }

    return EXIT_SUCCESS;
}

led.hを含む「include」とlibled.soを含む「lib」の2つのフォルダーを作成しました。

私は次のように構成しました: インクルードパス ライブラリパス

今、ledtest.ciをコンパイルすると、次のエラーが発生します

make all 
Building target: ledtest
Invoking: GCC C Linker
arm-linux-gnueabi-gcc -L/usr/arm-linux-gnueabi/lib -L/home/sanatan/Coustom/lib -o      
   "ledtest"  ./src/ledtest.o   
./src/ledtest.o: In function `main':
ledtest.c:(.text.startup+0x4): undefined reference to `ledon'
ledtest.c:(.text.startup+0x10): undefined reference to `ledoff'
collect2: ld returned 1 exit status
make: *** [ledtest] Error 1

しかし、ライブラリにlibled.soを追加すると:

以下のエラーが発生します:

**** Build of configuration Release for project ledtest ****

make all 
Building file: ../src/ledtest.c
Invoking: GCC C Compiler
arm-linux-gnueabi-gcc -I/home/sanatan/Coustom/include -I/usr/arm-linux-
    gnueabi/include -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/ledtest.d" -
    MT"src/ledtest.d" -o "src/ledtest.o" "../src/ledtest.c"
Finished building: ../src/ledtest.c

Building target: ledtest
Invoking: GCC C Linker
arm-linux-gnueabi-gcc -L/usr/arm-linux-gnueabi/lib -L/home/sanatan/Coustom/lib -o 
    "ledtest"  ./src/ledtest.o   -l/home/sanatan/Coustom/lib/libled.so
/usr/lib/gcc/arm-linux-gnueabi/4.6.1/../../../../arm-linux-gnueabi/bin/ld: cannot 
    find -l/home/sanatan/Coustom/lib/libled.so
collect2: ld returned 1 exit status
make: *** [ledtest] Error 1

**** Build Finished ****

しかし、私はファイルがそこにあると確信しています:

root@ubuntu:/home/sanatan/Coustom/lib# ls
led.o  libled.so

誰かがここで私を助けてくれませんか、私は何をすべきかわかりません。私を信じて宿題をしました..:)

前もって感謝します。

サナタン

4

1 に答える 1

2

ライブラリにリンクするときはいつでも、オプションを含める必要があります

    -lxyz

libxyzという名前のライブラリにリンクし、場合によっては-Lオプションを使用してライブラリへのパスを含めます。-lledフレッドのコメントが言うように、あなたはオプションを追加する必要があるかもしれないように思われるでしょう。

Eclipseでプロジェクトにライブラリを追加する方法の詳細については、この質問への回答を参照してください。

于 2012-06-18T14:19:16.873 に答える