Я пытаюсь сделать небольшое приложение для моей цели. Я уже установил toolchain в eclipse под linux. Теперь я пытаюсь создавать библиотеки.gcc linker не находит файл .so библиотеки
вот моя библиотека Заголовочный файл led.h:
#ifndef LED_H_
#define LED_H_
extern char ledon(char lednum);
extern char ledoff(char lednum);
#endif /* LED_H_ */
и мой с файл 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 testtest.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;
}
Я сделал две папки «include», которая содержит led.h и «lib», которая содержит libled.so.
Я настроен следующим образом: Include paths library paths
Теперь, когда я скомпилировать 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 в библиотеках:
i при ошибке:
**** 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 ****
Но я уверен, что файл существует:
[email protected]:/home/sanatan/Coustom/lib# ls
led.o libled.so
Может кто-то пожалуйста, помогите мне здесь, я не знаю, что делать. Поверьте мне, я сделал домашнее задание .. :)
спасибо заранее.
Sanatan
вы также добавить '' -lled'' компилятора, после того, как объекты, которые вы хотите связать? – Fred
Вы фактически включили библиотеку на этапе компиляции? Я не могу видеть это там? – mathematician1975
Я включил пути к файлу заголовка и файлу библиотеки, как показано на двух рисунках, встроенных в гипериндикатор. Фред, можешь объяснить, как в eclipse я бы добавил этот вариант. – sanatan